自定义WCF绑定可以抑制故障

时间:2010-08-31 17:04:27

标签: wcf wcf-binding

我有一个WCF服务,我正在异步调用。

如果我使用wsHttpBinding调用抛出正常.Net异常(即不是FaultException)的方法,则我的WCF通道将处于故障状态 - 这是预期的行为。

但是,如果我使用自定义绑定调用相同的方法:

<customBinding>
   <binding name="httpCompressed" sendTimeout="00:10:00" receiveTimeout="00:10:00">
      <httpTransport maxBufferSize="2147483647"
            maxBufferPoolSize="524288"
            maxReceivedMessageSize="2147483647" />
   </binding>
</customBinding>

然后,当我确实收到异常时,通道保持打开状态。这不是预期的行为 - 至少,不是我所知道的。

这是否表示customBinding for WCF中存在错误?这实际上是一种预期的行为(如果是这样,指针文档会非常好)。

提前感谢您的任何帮助。

大卫穆林 IMA Technologies

1 个答案:

答案 0 :(得分:1)

这是被驱逐的。默认设置(带安全会话)中的WsHttpBinding使用PerSession实例化。这意味着单个服务实例处理来自代理打开通道的所有请求。如果发生未处理的异常,则销毁服务实例并且通道出现故障。代理无法打开多个通道,无法启动另一个会话,因此您可以使用故障代理中止它。

您的自定义绑定使用纯http传输而不进行任何会话。由于使用了PerCall实例化。这意味着来自代理的每个请求都由新服务实例处理。每次呼叫后都会释放服务实例,故障不会影响通道,因为下一次呼叫将由新的服务实例处理。