首页 新闻 会员 周边 捐助

【WCF付费咨询】当服务端连接关闭后,但是客户端对象CommunicationState状态仍然是打开状态,为什么?(禁用可靠会话)

0
[待解决问题]

【WCF】当服务端连接关闭后,但是客户端对象CommunicationState状态仍然是打开状态,为什么?(禁用可靠会话)

chinaspx的主页 chinaspx | 初学一级 | 园豆:6
提问于:2019-06-22 07:02

我的问题是不用可靠会话,如何得知CommunicationState实时状态

chinaspx 5年前
< >
分享
所有回答(1)
0

建议试试 WCF 的 Discovery Announcements 特性

dudu | 园豆:30939 (高人七级) | 2019-06-22 09:34

感谢,我这里的 服务端连接关闭,是指客户端与服务端建立了100条链接,其中1条断了,客户端需要得知这个断的这条链接的变化,不是这个服务整个不可用。那是注册中心的概念了。

支持(0) 反对(0) chinaspx | 园豆:6 (初学一级) | 2019-06-22 10:02

@chinaspx: 订阅 Faulted 事件可以实现吗?参考资料:Understanding State Changes

支持(0) 反对(0) dudu | 园豆:30939 (高人七级) | 2019-06-22 10:21

@dudu: 感谢,试了不可以,只有显式代码调用才会触发这些事件,这条链接是服务器主动断开的(客户端netstat),属于隐式的,所以触发不到这些事件。

apiWcf.ChannelFactory.Closing += ChannelFactory_Closing;
apiWcf.ChannelFactory.Closed += ChannelFactory_Closed;
apiWcf.InnerChannel.Closing += InnerChannel_Closing;
apiWcf.InnerChannel.Closed += InnerChannel_Closed;
apiWcf.InnerChannel.Opened += InnerChannel_Opened;
apiWcf.Open();

支持(0) 反对(0) chinaspx | 园豆:6 (初学一级) | 2019-06-22 10:40

@chinaspx: 你不用可靠会话(reliable session),自己管理连接池,难道在连接池实现中没有对 tcp 连接进行心跳检查?

支持(0) 反对(0) dudu | 园豆:30939 (高人七级) | 2019-06-22 10:49

@dudu: https://stackoverflow.com/questions/11923452/wcf-and-inactivity-timeout-is-it-possible-to-disable-the-inactivity-timeout 心跳是有代价的

支持(0) 反对(0) chinaspx | 园豆:6 (初学一级) | 2019-06-22 11:35

@chinaspx: 你在测试时是如何触发服务端连接关闭的?

支持(0) 反对(0) dudu | 园豆:30939 (高人七级) | 2019-06-22 12:06

@dudu: 超时关闭

支持(0) 反对(0) chinaspx | 园豆:6 (初学一级) | 2019-06-23 07:12

@chinaspx: 建议提供相关代码

支持(0) 反对(0) dudu | 园豆:30939 (高人七级) | 2019-06-23 15:33
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册