首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# - WCF Duplex =>在客户端断开连接时触发事件

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

Stack Overflow用户
提问于 2013-06-04 23:57:53
回答 2查看 5.3K关注 0票数 1

当其中一个客户端断开连接时,我会尝试让我的服务知道。

我使用的是wsDualHttpBinding。

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

代码语言:javascript
复制
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事件会触发,没有任何问题...仍然不知道为什么,但它是有效的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-05 04:07:55

您遇到的问题可能是由于WsDualHttpBinding造成的。如果您有这个绑定,将创建两个连接,从客户端到服务和从服务到客户端。

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

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

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

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

此外,您还可以找到这个关于如何选择涉及WCF的各方之间的通信的很好的小抄:

票数 1
EN

Stack Overflow用户

发布于 2013-06-05 00:05:36

Closed事件应该在正常断开连接时发生;这就是实际发生的情况吗?要检测纯套接字断开连接,请侦听Faulted事件:

代码语言:javascript
复制
OperationContext.Current.Channel.Faulted += new EventHandler(FaultedHandler);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16922367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档