我有一个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答案 0 :(得分:1)
这是被驱逐的。默认设置(带安全会话)中的WsHttpBinding使用PerSession实例化。这意味着单个服务实例处理来自代理打开通道的所有请求。如果发生未处理的异常,则销毁服务实例并且通道出现故障。代理无法打开多个通道,无法启动另一个会话,因此您可以使用故障代理中止它。
您的自定义绑定使用纯http传输而不进行任何会话。由于使用了PerCall实例化。这意味着来自代理的每个请求都由新服务实例处理。每次呼叫后都会释放服务实例,故障不会影响通道,因为下一次呼叫将由新的服务实例处理。