如何在调用契约方法之前检测WCF会话崩溃?

如何在调用契约方法之前检测WCF会话崩溃?,wcf,session-state,Wcf,Session State,我正在为我的WCF服务使用会话模式。问题如下:如果会话已中断且不再存在,客户端在调用契约之前无法知道它 例如,如果服务已重新启动,则客户端的会话id无效,因为该会话已在服务器端关闭 我在调用合约之前检查通道状态,它的值是CommunicationState。即使会话已经中断也会打开。因此,当我在检查后调用合同时,我收到一条带有以下消息的CommunicationException: 远程端点不再识别此序列。这很可能是由于远程终结点上的中止。wsrm:Identifier的值不是已知的序列标识符。

我正在为我的WCF服务使用会话模式。问题如下:如果会话已中断且不再存在,客户端在调用契约之前无法知道它

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

我在调用合约之前检查通道状态,它的值是CommunicationState。即使会话已经中断也会打开。因此,当我在检查后调用合同时,我收到一条带有以下消息的CommunicationException:

远程端点不再识别此序列。这很可能是由于远程终结点上的中止。wsrm:Identifier的值不是已知的序列标识符。可靠会话出现故障

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

另外,CommunicationException类型是通用的,因此我无法通过捕获此异常来检测会话崩溃


p.p.S.我问过类似的问题,但在这种情况下,我不知道原因,现在我不知道如何回避它。

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

不幸的是,如果服务器崩溃或网络瘫痪,没有机制通知所有潜在的客户这个案例——他们将在下次尝试呼叫时发现


更新:是的,
CommunicationException
只是与WCF相关的所有异常的公共基类-请查看以查看可以捕获的所有后代异常,更具体地说,
EndpointNotFoundException
FaultException
(或
FaultException
),
协议异常
以及更多

是的,似乎唯一的方法是捕获异常,但是类型CommunicationException太笼统了。