询问者
如何判断WSDualHttpBinding连接中断

问题
-
服务端接受WSDualHttp、TCP和PIPE三种方式连接,客户端连接到服务器后,服务端保存客户端的上下文,然后循环快速地回调客户端发送数据。
如果以TCP和PIPE方式连接的客户端,如果网络中断或者其他的,服务端很快速地抛出通道异常而删除保存的此上下文,而不再向此客户端发送数据。
但是以WSDualHttp方式连接的客户端,客户端网络中断后,服务端不会捕捉到任何异常,扔然向此客户端发送数据,不知道是不是缓冲区满了的原因,一会儿所有客户端都收不到数据,并且客户端无法连接到服务,机器的CPU占用也会变得非常高。
请问这是什么原因,如何解决这样的问题呢?
请各位大虾不吝赐教。。。
补充一下:以上的情况是在本地测试的结果,是一台机器的测试情况。但是如果把服务放到机房的服务器上,居然无反应,也没有超时异常,什么反应都没有,我把路由器端口映射、DMZ都设置了也同样无反应。我把客户端放到同一个机房的另一个服务器上,也是同样的结果,完全无反应,服务也没有显示收到了连接。很奇怪的是,我一开始把服务放到服务器上的时候,由于没有安全验证,连接的时候还提示我服务端没有做安全验证的意思,可是把传输安全取消了,就是以上的情况,什么反应也没有了,也不超时。
这是怎么回事呢?
补充的也是WSDualHttp的情况,TCP连接正常。- 已编辑 南极的风 2011年12月23日 14:32
全部回复
-
我没使用过这个绑定做测试。所以不好下结论。
1.先检查一下是否有内存泄露,连接是否关闭
2.最大连接数量,是否做了限制,WCF的限流设置
3.客户端发送的请求,服务应该收到了吧,你可以加一个普通的 请求/应答模式的WCF服务,部署到DMZ测试一次。看看是不是正常
Frank Xu Lei--谦卑若愚,好学若饥
【老徐的网站】:http://www.frankxulei.com/ -
我没使用过这个绑定做测试。所以不好下结论。
1.先检查一下是否有内存泄露,连接是否关闭
2.最大连接数量,是否做了限制,WCF的限流设置
3.客户端发送的请求,服务应该收到了吧,你可以加一个普通的 请求/应答模式的WCF服务,部署到DMZ测试一次。看看是不是正常
Frank Xu Lei--谦卑若愚,好学若饥
【老徐的网站】:http://www.frankxulei.com/
1、这个DEMO是服务器端不间断回调,只要客户端在线就一直不断地回调客户端。所以客户端的超时设置我设为了最大值。在非WSDaulHttp连接下,如果客户端断线,那么服务器端会有异常从而中断服务回调此客户端,但是在WSDaulHttp连接下,没有这个异常抛出,就算客户端不在线了,也一直不断地回调客户端,且没有超时异常。2、我没有做限流设置,并且我启动的客户端也很少,只有两三个,或者三四个,这个应该不会达到了最大连接数量。
3、奇怪的是,WSDualHttp连接,客户端发送的请求,服务根本没有收到。改用普通的请求/应答模式,用WSDualHttp连接,服务也收不到请求,而用BasicHttpBinding就正常。
难道是我的连接方式不对?我贴出我用普通的请求/应答模式下的连接代码:
EndpointAddress ep = new EndpointAddress("http://Server/Test"); WSDualHttpBinding binding = new WSDualHttpBinding(); OptionalReliableSession rs = new OptionalReliableSession(); rs.Enabled = false; binding.ReliableSession = rs; binding.Security.Mode = WSDualHttpSecurityMode.None; ITest proxy = ChannelFactory<ITest>.CreateChannel(binding, ep); bool result = proxy.GetResult(); Console.WriteLine(result);
- 已编辑 南极的风 2011年12月26日 11:04
-
对于WsDualHttpBinding, 你应该启用可靠的会话,默认是没有启用,你可以设置下面的代码设置。
OptionalReliableSession rs = new OptionalReliableSession();
rs.Enabled = true;但你的代码里面没有设置启用可靠会话。
Please mark the replies as answers if they help or unmark if not. If you have any feedback about my replies, please contact msdnmg@microsoft.com Microsoft One Code Framework- 已编辑 Peter pi - MSFTModerator 2011年12月30日 6:00