我试图获得一个WCF服务,以了解客户端何时断开连接.
在阅读本文后,关于断开连接的wcf通知我设法让测试项目正常工作.
客户端和服务器保持打开状态,直到我关闭客户端,然后在下面的行中超时后,OperationContext.Current.Channel.Closed事件似乎触发.
<reliableSession enabled="true" ordered="true" inactivityTimeout="00:01:00" />
Run Code Online (Sandbox Code Playgroud)
经过测试后,我按照自己的意愿工作,然后尝试将其集成到一个更大的项目中.
这似乎有不同的表现,<reliableSession ordered="true" inactivityTimeout="00:01:00" />即使客户端仍处于打开状态,OperationContext.Current.Channel.Closed甚至会在配置中指定的时间后触发.
我注意到的不同之处在于我无法在配置中指定enabled ="true"属性.第二个项目使用WSDualHTTPBinding,而第一个项目使用WSHTTPBinding.
我的问题是为什么第二个项目以这种方式表现,我怎么能让它像第一个一样?
如果您需要任何代码文件或配置发布,请告诉我,我会直接让他们.
亲切的问候
灰
HTTP 协议本质上是无状态的并且纯粹是请求/回复。WSDualHTTPBinding 的工作原理是,它在服务器和客户端上打开通道,当服务器准备好发送消息时,它将使用客户端托管的通道来发送消息。因此,可能发生的情况是客户端上的连接打开,一分钟内没有听到任何声音,这被检测为“非活动”,然后客户端关闭连接。我不确定您的要求是什么,但您可能需要考虑切换到 TCPBinding,因为这是一个有状态连接。
客户端是否能够接收来自服务器的消息?消息是否定期发送?您确定客户端实际上保持连接打开吗?