有没有办法让无会话的WCF频道出错?

时间:2015-05-26 18:43:03

标签: wcf

如果我有无会话绑定,那么客户端频道是否会出现故障?

在我的具体情况下,我有以下自定义绑定:

<customBinding>
  <binding name="MyCustomBinding">
    <mtomMessageEncoding/>
    <httpTransport/>
  </binding>
</customBinding>

在客户端,我使用的是ClientBase<T>派生的默认生成代理。

我期待如果服务抛出一个未处理的异常,而不是FaultException它会导致通道出现故障,并使客户端代理也出错。但事实并非如此 - 代理仍处于开放状态,之后可以使用。我也试过违反Binding的一个超时 - 这也没有使通道出错并且客户端代理仍处于打开状态。

是否存在会导致客户端代理出现故障的情况?

相关:

1 个答案:

答案 0 :(得分:-1)

当发生不可恢复的错误时,ClientChannel会转换到Faulted-State。在这种状态下不再可用。恢复策略是创建一个新对象。主要原因是

  
      
  • 如果打开方法因任何原因失败,对象将转为故障状态。
  •   
  • 如果基于会话的频道检测到无法恢复的错误,则会转换为故障状态。例如,如果存在协议错误(即,它在无效时间收到协议消息)或者远程端点中止会话,则会发生这种情况。
  •   

取自CommunicationState

基于会话的引用传输会话。因此任何未处理的异常都会使通道出错,以防止在异常后再次使用代理。当没有传输级会话时,客户端可以在异常后继续使用代理,除了它,它不应该。(/ p>

有关state changes

的更多信息