C# 如何使客户端自动检测WCF服务是否关闭或连接丢失

C# 如何使客户端自动检测WCF服务是否关闭或连接丢失,c#,wcf,C#,Wcf,我已经研究了一些类似的线程,但是这些解决方案要求客户端主动检测WCF服务是否正在运行。但是,如果我处于事务中间,WCF服务掉了,或者由于某种原因连接丢失了呢?在我的测试中没有抛出异常;要么什么都没发生,要么就是那个旋转的圆圈一直在转。我希望客户端检测服务/连接是否丢失,并优雅地告诉用户它已关闭。我的代码中设置了超时: NetNamedPipeBinding binding = new NetNamedPipeBinding(NetNamedPipeSecurityMode.None);

我已经研究了一些类似的线程,但是这些解决方案要求客户端主动检测WCF服务是否正在运行。但是,如果我处于事务中间,WCF服务掉了,或者由于某种原因连接丢失了呢?在我的测试中没有抛出异常;要么什么都没发生,要么就是那个旋转的圆圈一直在转。我希望客户端检测服务/连接是否丢失,并优雅地告诉用户它已关闭。我的代码中设置了超时:

NetNamedPipeBinding binding = new NetNamedPipeBinding(NetNamedPipeSecurityMode.None);
            binding.OpenTimeout = TimeSpan.FromSeconds(15);
            binding.SendTimeout = TimeSpan.FromSeconds(3000);
            binding.ReaderQuotas.MaxStringContentLength = int.MaxValue;
            this._engineChannel = new DuplexChannelFactory<IEngineApi>(this, binding, new EndpointAddress("net.pipe://localhost/Engine"));
NetNamedPipeBinding binding=新的NetNamedPipeBinding(NetNamedPipeSecurityMode.None);
binding.OpenTimeout=TimeSpan.FromSeconds(15);
binding.SendTimeout=TimeSpan.FromSeconds(3000);
binding.ReaderQuotas.MaxStringContentLength=int.MaxValue;
this._engineChannel=new DuplexChannelFactory(this,binding,new EndpointAddress(“net”)。pipe://localhost/Engine"));

但是,如果我在交易的中间,实际上什么也没有发生;这些超时似乎不会影响任何事情。

您可以使用以下两种方法之一:

1. 我做的两件事是telnet检查以确保WCF进程 把插座打开

telnet主机8080我做的第二件事总是添加一个IsAlive方法 我的WCF合同,以便有一个简单的方法来调用检查 服务主机是否正常运行

公共图书馆{ 返回true;}

资料来源:

2. 使用WCF 4.0中引入的发现/公告功能

发现取决于用户数据报协议(UDP)。UDP是一种无连接协议,客户端和服务器之间不需要直接连接。客户端使用UDP来广播支持指定合约类型的任何端点的查找请求。支持此约定的发现端点将接收请求。发现端点的实现使用服务端点的地址向客户端作出响应。一旦客户机确定了服务,它就会调用该服务来设置调用

简单的用法示例:

这里可能是一个很好的信息: