在将新代码发布到生产环境时,我们经常需要更新App_Code目录中的.cs文件。通常,如果生产中有任何用户(并且总是有用户,甚至是一整夜),则在任何应用程序页面加载时都会收到错误消息:
程序集'C:\ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727 \ Temporary ASP.NET
Files \ root \ a18f28ce \ a6daf424 \ App_Code.dll'已加载到另一个应用程序域中。
我们发现使应用程序再次响应的唯一方法是重新启动IIS。现在的问题是,IIS将经常无法恢复。通过进入IIS管理器,单击服务器名称,然后单击右侧的重新启动,我们重新启动IIS。系统将思考几秒钟,然后给出错误消息:
超时错误。 W3SVC无法启动。
此时唯一的解决方案是重新启动服务器,我们希望在生产服务器上避免这种情况。
关于如何解决IIS超时错误或(理想情况下)如何首先避免“已加载到另一个应用程序域中”错误的任何想法?
答案 0 :(得分:1)
上述解决方案的一个更简单/自动的解决方案是在部署过程中使用〜/ App_Offline.htm文件(IIS中内置了一项功能,因此WebDeploy可以避免文件锁定问题)。
修改您的部署过程,以便第一步是在Webroot中创建App_Offline.htm
。 IIS将检测到该文件并立即关闭应用程序域-释放所有锁定等。正常部署应用程序而没有任何锁定问题,完成后删除App_Offline。 IIS收到的下一个请求将启动应用程序域,以加载您新部署的版本。
IIS会为所有请求返回App_Offline.htm文件中放置的所有内容,直到您删除该文件为止。
答案 1 :(得分:0)
尝试使用以下命令从命令提示符(管理员)重新启动IIS:
iisreset
或
iisreset / stop
然后
iisreset / start
注意:可能需要重新启动工作进程
答案 2 :(得分:0)
转到任务管理器->进程,然后手动停止W3SVC进程。 完成此操作后,重新启动IIS时该过程应正常启动
注意:它也可能是Svchost进程
转到“进程”以找到合适的svchost终止