【发布时间】:2010-01-23 17:03:48
【问题描述】:
我有点被这个问题难住了,希望我能在这里找到一些答案。
基本上,我有一个跨 2 台服务器运行的 ASP.NET 应用程序。服务器 A 将所有业务逻辑/数据访问公开为 Web 服务,服务器 B 拥有与这些服务通信的网站(通过 WCF,使用 net.tcp 绑定)。
在服务器 A 上的 IIS 启动我的应用程序池回收几秒钟后出现问题。回收发生在分配的时间之后(使用 IIS 中设置的默认 29 小时)。
在(服务器A的)服务器日志中:
进程 ID 为的工作进程 '####' 服务应用程序池 “AppPoolName”已请求回收 因为工作进程到达了它的 允许的处理时间限制。
我认为这是正常行为。问题是几秒钟后,我在服务器 B 上得到了这个异常:
此频道不能再用于 发送消息作为输出会话 由于以下原因自动关闭 服务器启动的关闭。任何一个 通过设置禁用自动关闭 DispatchRuntime.AutomaticInputSessionShutdown 为假,或考虑修改 与遥控器的关机协议 服务器。
并非每次回收都会发生这种情况;我假设它发生在有人通过请求访问网站而回收发生时。
此外,在我进行干预之前,我的申请已被关闭;每次对该页面发出后续请求时,此异常都会继续发生。我通过编辑 web.config 进行干预(通过在文件末尾添加空格或其他良性内容)并保存它 - 我假设这会导致我的应用程序重新编译并恢复服务。我还尝试过运行一个批处理文件,每次异常发生时都会为我执行此操作;)
现在,我几乎找不到有关此异常的任何信息,而且我一直在寻找一段时间。我找到的大部分信息都与我没有使用的 WCF 设置有关。
我已经阅读了“DispatchRuntime.AutomaticInputSessionShutdown”,但我认为它与这种情况无关。此特定属性是指服务自动关闭以响应客户端的行为,这不是这里发生的情况。此处,服务因 IIS 而关闭。
我确实阅读了this,它通过某种工作来自动恢复服务,但我真的很想了解这里发生了什么,而不是绕过它!
我已经开始使用 IIS7 中的设置,特别是打开/关闭重叠回收并增加进程启动/关闭时间。我想知道完全关闭回收是否安全(我相信如果我将回收时间间隔设置为 0?)但是,我想知道发生了什么!
无论如何,如果您需要更多信息,请告诉我。提前致谢!
【问题讨论】:
-
我也面临同样的问题。你找到解决办法了吗?接受的答案似乎不是我的解决方案。