繁体   English   中英

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

[英]C# - WCF Duplex => Fire an event when a client disconnect

我试图让我的服务知道客户端之一何时断开连接。

我正在使用wsDualHttpBinding。

目前,我尝试使用此事件:

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

但是此事件从未触发过...

请帮我知道怎么做!

编辑:

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

使用netTcpBinding,Closed事件将毫无问题地触发...仍然不知道为什么,但是它可以工作。

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

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

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

当应用程序通过Internet部署时,它可能会在支持此类应用程序时产生一些问题,您需要确保人们不在防火墙或NAT之类的环境中,以免您的服务重新连接到客户端。

我仍然不知道为什么测试时它在本地计算机上不起作用,但是我将尝试解决它并更新答案。

正如您在聊天中告诉我的更多详细信息一样,从您的应用程序的性质来看,最好使用NetTcpBinding。 在这种情况下,更容易理解正在发生的情况(因为创建了一个连接),并且在客户端正常关闭或中止的情况下,您将收到通知。

正如我之前告诉您的,无论如何,最好创建一些心跳机制,以在计算机或路由器意外关闭的情况下使事情更可靠。

此外,您可以找到有关如何选择涉及WCF的各方之间的通信的这份备忘单:

wcf装订备忘单

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM