【问题标题】:Handling client disconnect in duplex WCF service在双工 WCF 服务中处理客户端断开连接
【发布时间】:2011-09-01 13:48:24
【问题描述】:

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

阅读本文wcf notification on disconnect 后,我设法让一个测试项目工作。

客户端和服务器保持打开状态,直到我关闭客户端,然后 OperationContext.Current.Channel.Closed 事件似乎在下一行中的超时到期后触发。

<reliableSession enabled="true" ordered="true" inactivityTimeout="00:01:00" />

在测试它按我想要的那样工作之后,我尝试将它集成到我拥有的一个更大的项目中。

这似乎表现不同,即使客户端仍处于打开状态,OperationContext.Current.Channel.Closed 甚至会在配置 &lt;reliableSession ordered="true" inactivityTimeout="00:01:00" /&gt; 中指定的时间之后触发。

我注意到的不同之处在于我无法在配置中指定 enabled="true" 属性。第二个项目也使用 WSDualHTTPBinding,而第一个项目使用 WSHTTPBinding。

我的问题是为什么第二个项目会以这种方式表现,我怎样才能让它表现得像第一个?

如果您需要发布任何代码文件或配置,请告诉我,我会直接提供。

亲切的问候

【问题讨论】:

  • 客户端运行的平台是什么?

标签: c# wcf


【解决方案1】:

HTTP 协议本质上是无状态的,纯粹是请求/回复。 WSDualHTTPBinding 的工作原理是它在服务器和客户端上打开通道,当服务器准备好发送消息时,它将使用客户端托管的通道来发送消息。所以可能发生的情况是客户端上的连接打开了一分钟没有听到任何声音,这被检测为“非活动”,然后客户端关闭连接。我不确定您的要求是什么,但您可能需要考虑切换到 TCPBinding,因为这是一个有状态的连接。

客户端是否能够接收来自服务器的消息?消息是否定期发送?您确定客户端实际上保持连接打开吗?

【讨论】:

  • 嗨,杰森,感谢您的回答。我会尽快回答您的问题并在此处发布。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多