WCF 路由服务通道关闭

本文关键字:通道 服务 路由 WCF | 更新日期: 2023-09-27 17:56:23

错误消息如下:

此通道不能再用于发送消息作为输出 由于服务器启动的关闭,会话已自动关闭。也 通过设置 DispatchRuntime.AutomaticInputSessionShutdown 为 false,或者考虑 修改远程服务器的关闭协议。

当我创建对 WCF 路由器的 Web 请求(wsHttpBinding 或 BasicHttpBinding to NetTcpBinding)时,路由器随后请求 WinService,就会发生这种情况。一旦 WinService 引发异常,下一个请求就会给出上述错误消息。它由 WCF 路由器创建。任何地方都没有解决方案,我花了几天时间寻找一个。

链接到没有解决方案的类似问题:

  • WCF 通信错误随机发生,无法捕获原因
  • http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/3f19cdaa-f426-4902-a93a-2654c7f19788/

WCF 路由服务通道关闭

我所做的工作解决方案如下:

    不要抛出异常
  • ,抛出错误异常

如何做到这一点:

  • 在 WinService 接口上定义响应代码枚举(以下示例)
[System.CodeDom.Compiler.GeneratedCodeAttribute("svcutil", "3.0.4506.2152")]
[System.SerializableAttribute()]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "blah")]
public enum ErrorCode
{
    ERROR
}

或者只是

public enum ErrorCode
{
    ERROR
}
  • 然后,而不是使用定义的枚举抛出异常 FaultException:

抛出新的 FaultException(ErrorCode.ERROR, new FaultReason("blah"), new FaultCode("Sender"));

  • 就是这样!现在,您可以发送生成此异常的请求,并且它不会关闭通道