【发布时间】:2017-03-09 19:22:07
【问题描述】:
我有一个使用 WCF 服务的 WPF 应用程序。服务实例上下文模式设置为 PerSession。在服务中,有一个方法可以回调客户端,发送从外部队列接收到的消息。
当我启动新服务并运行应用程序时,一切正常,回调通道处于打开状态。当我关闭应用程序并再次运行它时,回调总是抛出“无法访问已处理的对象”错误并处于关闭状态。
为了连接到服务表单客户端我使用了 DuplexChannelFactory,在关闭应用程序通道和通道工厂后被处理。我可以在日志中看到调用了 Closing 和 Closed 事件。我认为也许服务正在举行最后一个会话,或者当我重新运行应用程序时,它连接到已关闭的同一通道。我检查了会话 ID,它们是不同的。 UUId 是一样的。
对我来说,客户端应用在重启后似乎正在使用相同的频道。服务端是否缓存了有关频道的内容?
我希望我给出了足够的解释。如果需要,我会提供更多信息。任何想法如何解决这个问题?
谢谢
【问题讨论】:
-
您是否确认您收到的错误不是来自 WCF 服务本身?在第一次断开连接后,WCF 服务内部可能发生了一些事情,导致下一次连接出现异常。另外,您是在初始化 WCF 服务时遇到错误,还是在实际尝试调用函数时遇到错误?
-
你有完整的堆栈跟踪吗?
-
此行为是设计使然。当客户端关闭时回调通道将关闭。
-
你能展示一段记住回调和发送消息的服务器代码吗?