当前位置:首页 > 服务器技术 > IIS

c# – IIS7进程回收后,两台服务器之间的WCF通信崩溃

我有点难过这个,并希望我能在这里找到答案.

基本上,我有一个运行在两台服务器上的ASP.NET应用程序.服务器A将所有业务逻辑/数据访问权限公开为Web服务,而服务器B具有与这些服务进行通信的网站(通过WCF,使用net.tcp绑定).

在服务器A上的IIS启动我的应用程序池的回收后几秒钟出现此问题.回收发生在指定的时间之后(使用IIS中设置的默认值29小时).

在服务器日志中(服务器A):

A worker process with process id of
‘####’ serving application pool
‘AppPoolName’ has requested a recycle
because the worker process reached its
allowed processing time limit.

我相信这是正常行为.问题是几秒钟后,我在服务器B上遇到此异常:

This channel can no longer be used to
send messages as the output session
was auto-closed due to a
server-initiated shutdown. Either
disable auto-close by setting the
DispatchRuntime.AutomaticInputSessionShutdown
to false, or consider modifying the
shutdown protocol with the remote
server.

每次回收都不会发生这种情况;我认为当有人在回收发生时请求网站时,就会发生这种情况.

此外,我的申请一直停止,直到我介入;每次对页面发出后续请求时,都会继续发生此异常.我通过编辑web.config进行干预(通过在文件末尾添加一个空格或良性的东西)并保存它 – 我认为这会导致我的应用程序重新编译并重新启动服务.我也尝试过运行批处理文件,每次发生异常时都会为我执行此操作;)

现在,我几乎找不到有关此异常的任何信息,而且我一直在寻找.我发现的大多数信息都与我不使用的WCF设置有关.

我已经读过“DispatchRuntime.AutomaticInputSessionShutdown”,我不认为这与这种情况有关.此特定属性是指服务自动关闭以响应客户端的行为,这不是此处发生的情况.此处,服务因IIS而关闭.

我确实阅读了this,它经历了一些工作,自动恢复服务,但我真的很想了解这里发生了什么,而不是破解它!

我已经开始使用IIS7中的设置,特别是打开/关闭Overlapped Recycling并增加进程启动/关闭时间.我想知道完全关闭回收是否安全(我相信如果我把循环时间间隔设为0?)但是,我想知道发生了什么!

无论如何,如果您需要更多信息,请告诉我.提前致谢!

解决方法:

这可能与您打开和关闭WCF连接的方式有关.

如果您在应用程序启动时打开代理,然后继续使用此代码,则连接中断,这是由服务器端的重新启动引起的.导致客户端出错,因为代理正在与之通信的服务器不再存在.

当您重新启动客户端(更改web.config)时,将针对正在运行的服务器创建新代理.

解决此问题的方法是确保在使用后关闭WCF连接.

http://www.codeguru.com/csharp/.net/net_wcf/article.php/c15941/


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!