错误消息如下:
此通道不能再用于发送消息作为输出 由于服务器启动的关闭,会话已自动关闭。也 通过设置 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/
我所做的工作解决方案如下:
- 不要抛出异常
- ,抛出错误异常
如何做到这一点:
- 在 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"));
- 就是这样!现在,您可以发送生成此异常的请求,并且它不会关闭通道