WCF - 无法访问已处置的对象

时间:2017-03-09 19:22:07

标签: c# .net wpf wcf

我有一个使用WCF服务的WPF应用程序。服务实例上下文模式设置为PerSession。在服务中有一个方法,它回调客户端,发送从外部队列收到的消息。

当我启动新服务并运行应用程序时,一切正常,回调通道处于打开状态。当我关闭应用程序并再次运行它时,回调总是抛出'无法访问已处置的对象'错误并且处于关闭状态。

要连接到服务表单客户端,我使用DuplexChannelFactory,关闭应用程序通道和通道facotry后。我可以在日志中看到调用Closing和Closed事件。我认为也许服务是持有最后一个会话,或者当我重新运行应用程序时它连接到已关闭的同一个通道。我检查了会话ID,它们是不同的。 UUid是一样的。

对我来说,看起来客户端应用程序在重启后使用相同的频道。服务方是否缓存了关于渠道的事情?

我希望我给出足够的解释。如果需要,我会提供更多信息。任何想法如何解决这个问题?

由于

1 个答案:

答案 0 :(得分:1)

我遇到了类似的错误,其中的问题是Internet信息服务(IIS)应用程序池的“请求限制”太有限,导致应用程序池在每次请求后都回收。只需将“请求限制”值更改为0(即无限制)或更高的数字,即可解决问题。

更改“请求限制”:

  1. 打开IIS管理器。
  2. 展开主机并单击“应用程序池”。
  3. 右键单击运行Web服务的应用程序池,然后从上下文菜单中选择“高级设置”。
  4. 向下滚动到“回收”部分,您会在其中找到“请求限制”。
  5. 指定新的“请求限制”。
  6. 点击“确定”。