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

Mat*_*ith 10 wcf

如果我有一个无会话绑定,在任何情况下客户端通道都会出错吗?

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

<customBinding>
  <binding name="MyCustomBinding">
    <mtomMessageEncoding/>
    <httpTransport/>
  </binding>
</customBinding>
Run Code Online (Sandbox Code Playgroud)

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

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

是否有任何情况会导致客户端代理出现故障?

有关:

Jeh*_*hof -1

当发生不可恢复的错误时,ClientChannel 会转换为故障状态。在这种状态下是无法再使用的。恢复策略是创建一个新对象。主要原因是

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

摘自《通讯状态》

基于会话是指传输会话。因此,任何未处理的异常都会使通道发生故障,以防止在异常后再次使用代理。当没有传输级会话时,客户端可以在异常后继续使用代理,但同样不应该这样做。

有关状态更改的更多信息。