2

错误消息如下:

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

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

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

4

1 回答 1

2

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

  • 不要抛出异常,抛出 FaultException

怎么做:

  • 在 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
}
  • 然后使用定义的枚举代替 Exception throw FaultException:

throw new FaultException(ErrorCode.ERROR, new FaultReason("blah"), new FaultCode("Sender"));

  • 就是这样!现在您可以发送生成此异常的请求并且它不会关闭通道
于 2013-01-29T10:12:42.703 回答