我有一个使用可靠会话的WCF服务。在我的测试中,我倾向于打开一个频道,调用一个方法,然后关闭频道。
我经常在The session was closed before message transfer was complete.
期间收到Close()
例外。
鉴于我的方法是同步的,消息传输应该是完整的。如果它是导致这个问题的可靠会话(因为它仍然在幕后做某事),它肯定是负责阻止我的Close()
呼叫,还是放弃而不抛出异常?
如何避免此异常?
答案 0 :(得分:1)
您应该找到导致连接关闭的原因。使用WCF服务配置编辑器为服务器和客户端配置文件添加诊断信息。
重新发送错误并在查看器中打开日志。您可能会发现该消息在服务器端很大。
答案 1 :(得分:0)
您可能需要考虑的是在调用Close()时指定超时值,以便有更多时间进行正常关闭。这可以免除许多问题。 (虽然我同意找到原因并试图阻止它也很重要。)
答案 2 :(得分:0)
我遇到了同样的问题,解决方案是通过将被调用的方法标记为 IsOneWay = false 这是默认设置来更改我的界面定义中的操作合同。
确保您没有将方法的操作合同更改为
[OperationContract(IsOneWay=true)]