有没有办法让无会话 WCF 通道出错?
Posted
技术标签:
【中文标题】有没有办法让无会话 WCF 通道出错?【英文标题】:Is there a way to fault a session-less WCF channel? 【发布时间】:2015-08-08 14:13:36 【问题描述】:如果我有一个无会话绑定,在任何情况下 客户端 通道会出错?
在我的具体情况下,我有以下自定义绑定:
<customBinding>
<binding name="MyCustomBinding">
<mtomMessageEncoding/>
<httpTransport/>
</binding>
</customBinding>
在客户端,我使用从ClientBase<T>
派生的默认生成代理。
我期待如果服务抛出一个不是FaultException
的未处理异常,它会导致通道出现故障并导致客户端代理出现故障。然而,事实并非如此——代理仍然保持在 Open 状态并且之后可以使用。我还尝试违反绑定的超时之一——这也没有导致通道故障,客户端代理仍处于打开状态。
是否有任何情况会导致客户端代理出现故障?
相关:
Custom WCF Binding Suppresses Fault【问题讨论】:
【参考方案1】:当发生不可恢复的错误时,ClientChannel 将转换为故障状态。在这种状态下不再可用。恢复策略是创建一个新对象。主要原因是
如果 Open 方法因任何原因失败,则对象将转换为错误状态。 如果基于会话的通道检测到无法恢复的错误,则会转换到故障状态。例如,如果存在协议错误(即,它在无效时间收到协议消息)或远程端点中止会话,则可能发生这种情况。
取自CommunicationState
基于会话的是指传输会话。所以任何未处理的异常都会使通道出错,以防止在异常发生后再次使用代理。当没有传输级会话时,客户端可以在异常发生后继续使用代理,除非再次例外。
更多关于state changes的信息。
【讨论】:
您知道如何使用无会话通道导致“不可恢复的错误”吗?您能否举一个 Open 方法失败并且客户端通道转换为故障状态的示例?另外,您为什么说“当没有传输级会话时,客户端可以在出现异常后继续使用代理,但又一次,它不应该”。为什么不呢?以上是关于有没有办法让无会话 WCF 通道出错?的主要内容,如果未能解决你的问题,请参考以下文章