当其中一个客户端断开连接时,我会尝试让我的服务知道。
我使用的是wsDualHttpBinding。
目前,我正在尝试使用此事件:
OperationContext.Current.Channel.Closed += new EventHandler((sender, e) => ClientIsDisconnected(sender, e, currentCallbackChannel));但是这个事件永远不会被触发...
请帮助我知道这是怎么做的!
编辑:
多亏了anderhil,我最终将wsDualHttpBinding替换为netTcpBinding (使用这里描述的适当配置:http://msdn.microsoft.com/en-us/library/ff647180.aspx#Step1)。
使用netTcpBinding时,Closed事件会触发,没有任何问题...仍然不知道为什么,但它是有效的。
发布于 2013-06-05 04:07:55
您遇到的问题可能是由于WsDualHttpBinding造成的。如果您有这个绑定,将创建两个连接,从客户端到服务和从服务到客户端。
当应用程序部署在互联网上时,它可能会产生一些支持此类应用程序的问题,您需要确保人们没有在防火墙或NAT等后面,这可能会阻止您的服务连接回客户端。
我仍然不知道为什么它在测试时不能在本地机器上工作,但我会尝试解决它并更新答案。
正如你在我们的聊天中告诉我的更多细节,从你的应用程序的性质来看,最好使用NetTcpBinding。在这种情况下,更容易理解发生了什么,因为创建了一个连接,并且在客户端完全关闭或中止的情况下,您将收到通知。
正如我之前告诉过你的,无论如何,最好创建一些心跳机制,以便在意外的计算机或路由器关闭的情况下有更可靠的东西。
此外,您还可以找到这个关于如何选择涉及WCF的各方之间的通信的很好的小抄:

发布于 2013-06-05 00:05:36
Closed事件应该在正常断开连接时发生;这就是实际发生的情况吗?要检测纯套接字断开连接,请侦听Faulted事件:
OperationContext.Current.Channel.Faulted += new EventHandler(FaultedHandler);https://stackoverflow.com/questions/16922367
复制相似问题