C# - WCF Duplex =>客户端断开连接时触发事件

时间:2013-06-04 15:57:53

标签: c# wcf events callback disconnected

我正在尝试让我的服务知道其中一个客户端何时断开连接。

我正在使用wsDualHttpBinding。

目前,我尝试使用此活动:

OperationContext.Current.Channel.Closed += new EventHandler((sender, e) => ClientIsDisconnected(sender, e, currentCallbackChannel));

但这件事永远不会被解雇......

请帮助我知道它是如何完成的!

编辑:

感谢anderhil,我终于通过netTcpBinding替换了wsDualHttpBinding(使用此处描述的适当配置:http://msdn.microsoft.com/en-us/library/ff647180.aspx#Step1)。

使用netTcpBinding,Closed事件会毫无问题地触发......仍然不知道为什么但它有效。

2 个答案:

答案 0 :(得分:1)

Closed事件应该在正常断开时发生;那是怎么回事? 要检测纯套接字断开连接,请侦听Faulted事件:

OperationContext.Current.Channel.Faulted += new EventHandler(FaultedHandler);

答案 1 :(得分:1)

您遇到的问题很可能是因为WsDualHttpBinding。如果您具有此绑定,则会创建两个连接,从客户端到服务以及从服务到客户端。

当通过互联网部署应用程序时,它可能会产生支持此类应用程序的一些问题,您需要确保人员不在防火墙或NAT等之后,这可能会阻止您的服务连接回客户端。

我仍然不知道为什么它在测试时无法在本地机器上运行,但我会尝试解决它并更新答案。

正如您在聊天中告诉我更多细节,从应用程序的性质来看,最好使用NetTcpBinding。在这种情况下,更容易理解导致创建一个连接的情况,并且您将在Gracefull关闭或中止客户端时收到通知。

正如我之前告诉过你的那样,无论如何最好创建一些心跳机制,以便在意外的计算机或路由器关闭时让事情更可靠。

此外,您可以找到关于如何选择涉及WCF的各方之间的沟通的好的备忘单:

wcf binding cheat sheet