2017-03-09 60 views
1

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

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

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

对我来说,它看起来像客户端应用程序重新启动后使用相同的渠道。服务端是否缓存关于频道的内容?

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

感谢

+0

您确定您收到的错误不是来自WCF服务本身吗?也许在第一次断开连接之后,WCF服务中会发生一些事件,导致下一次连接发生异常。另外,你是否获得了WCF服务初始化时的错误,或者当你真的试着调用一个函数? –

+0

你有完整的堆栈跟踪吗? –

+0

此行为是设计使然。当客户关闭时,回调通道将关闭。 –

回答

0

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

要更改 “请求限制”:

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