我查看了一堆类似Detect if wcf service is activated的线程,但这些解决方案要求客户端主动检测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"));
但如果我处于交易中间,实际上并没有发生任何事情;这些超时似乎不会影响任何事情。
答案 0 :(得分:2)
您可以使用以下两种方法之一:
我做的两件事是telnet检查以确保WCF流程 打开插座。
telnet host 8080我做的第二件事总是添加一个IsAlive方法 到我的WCF合同,以便有一个简单的方法来调用检查 服务主机运行正常。
public bool IsAlive(){ 返回true; }
使用WCF 4.0中引入的发现/通知功能
发现 取决于用户数据报协议(UDP)。 UDP是无连接协议,客户端和服务器之间不需要直接连接。客户端使用UDP来广播对支持指定合同类型的任何端点的查找请求。支持此合同的发现端点将收到请求。发现端点的实现使用服务端点的地址响应客户端。客户端确定服务后,会调用该服务来设置呼叫。
简单用法示例:http://www.codeproject.com/Articles/469549/WCF-Discovery