如何使客户端自动检测WCF服务是否关闭或失去连接
本文关键字:失去 连接 是否 服务 何使 客户端 自动检测 WCF | 更新日期: 2023-09-27 18:04:26
我研究了一堆线程,比如检测wcf服务是否被激活,但这些解决方案需要客户端主动检测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"));
但是如果我在一个事务的中间,实际上什么都没有发生;这些超时似乎不影响任何事情。
您可以使用以下两种方法之一:
<标题> 1我做的两件事是telnet检查以确保WCF进程打开套接字
我做的第二件事是总是添加一个IsAlive方法到我的WCF合约,以便有一个简单的方法来调用检查 业务主机运行正常。public bool IsAlive() {返回true;}
来源:ping WCF Services
<标题> 2 h1> 用WCF 4.0中引入的发现/公告功能发现依赖于UDP (User Datagram Protocol)。UDP是一种无连接协议,客户端和服务器之间不需要直接连接。客户端使用UDP广播查找请求的任何端点支持指定的合同类型。支持此契约的发现端点将接收请求。发现端点的实现使用服务端点的地址响应客户端。一旦客户端确定了服务,它就调用服务来设置调用。
简单用法示例:http://www.codeproject.com/Articles/469549/WCF-Discovery
标题>标题>