【WCF】当服务端连接关闭后,但是客户端对象CommunicationState状态仍然是打开状态,为什么?(禁用可靠会话)
建议试试 WCF 的 Discovery Announcements 特性
感谢,我这里的 服务端连接关闭,是指客户端与服务端建立了100条链接,其中1条断了,客户端需要得知这个断的这条链接的变化,不是这个服务整个不可用。那是注册中心的概念了。
@chinaspx: 订阅 Faulted 事件可以实现吗?参考资料:Understanding State Changes
@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();
@chinaspx: 你不用可靠会话(reliable session),自己管理连接池,难道在连接池实现中没有对 tcp 连接进行心跳检查?
@dudu: https://stackoverflow.com/questions/11923452/wcf-and-inactivity-timeout-is-it-possible-to-disable-the-inactivity-timeout 心跳是有代价的
@chinaspx: 你在测试时是如何触发服务端连接关闭的?
@dudu: 超时关闭
@chinaspx: 建议提供相关代码
我的问题是不用可靠会话,如何得知CommunicationState实时状态
– chinaspx 5年前