代码之家  ›  专栏  ›  技术社区  ›  David Mullin

自定义WCF绑定取消错误

  •  1
  • David Mullin  · 技术社区  · 14 年前

    我有一个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>
    

    然后,当我收到一个异常返回时,通道将保持打开状态。这不是预期的行为——至少,据我所知不是这样。

    这是否表示WCF的自定义绑定中存在错误?这实际上是一种预期的行为吗(如果是这样,指针文档就很好了)。

    提前感谢您的帮助。

    穆林 IMA技术

    1 回复  |  直到 14 年前
        1
  •  1
  •   Ladislav Mrnka    14 年前

    这是费用。默认设置(带安全会话)中的wshttpbinding使用会话实例。这意味着单个服务实例处理来自打开通道的代理的所有请求。如果发生未处理的异常,则服务实例将被破坏,并且通道出现故障。代理无法打开多个通道,也无法启动另一个会话,因此您只能中止出现故障的代理。

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