wcf - 如何在调用合约方法之前检测 WCF session 崩溃?

标签 wcf session-state

我正在为我的 WCF 服务使用 session 模式。问题如下:如果 session 被破坏并且不再存在,客户端在调用合约之前无法知道它。

例如,如果服务已重新启动,则客户端的 session ID 无效,因为该 session 已在服务器端关闭。

我在调用合约之前检查 channel 状态,其值为 CommunicationState.Opened,即使 session 已经中断。因此,当我在检查后调用合约时,我收到带有以下消息的 CommunicationException:

The remote endpoint no longer recognizes this sequence. This is most likely due to an abort on the remote endpoint. The value of wsrm:Identifier is not a known Sequence identifier. The reliable session was faulted.

有什么解决办法吗?我需要一种方法在调用合约之前获取适当的 session 状态,以便我可以在不出现异常的情况下恢复它。

附注CommunicationException 类型是通用的,因此我无法通过捕获此异常来检测 session 崩溃。

P.P.S。我问过类似的问题here ,但当时我不知道原因,现在我不知道如何规避它。

最佳答案

不,没有解决方法 - 您所能(并且应该做)的就是使用适当的防御性编程原则,以便能够在发生此类异常时捕获并处理它们。

不幸的是,如果服务器崩溃或网络出现故障,则没有任何机制可以将这种情况通知所有潜在客户 - 他们只会在下次尝试调用时发现。

更新:是的,CommunicationException只是与 WCF 相关的所有异常的公共(public)基类 - 查看 MSDN docs更具体地查看您可以捕获的所有后代异常 - EndpointNotFoundException , FaultException (或FaultException<T>),ProtocolException还有很多很多!

关于wcf - 如何在调用合约方法之前检测 WCF session 崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2880550/

相关文章:

android - 我如何向 Facebook 中的特定好友发送消息或通知

c# - 使用状态服务器在不同 .NET 版本之间共享 session 状态

.net - SQL session 状态 - 数据库 SessionId 与 ASP.NET_SessionID 值不同

wcf - SAML 断言消费者服务 (ACS) - 实现建议

azure - Windows Azure 网站 session 状态

ASP.NET session 状态性能基准

asp.net - 在 ASP.NET 中使用 session

asp.net-mvc - 在 WCF 服务内部渲染 Razor View

wcf - "Preview Transform"在 VS2017 中给出错误消息

wcf - 如何为WCF服务库创建wsdl文件?