首页 > 解决方案 > IIS 无法重新启动并出现超时错误

问题描述

当我们将新代码发布到生产环境时,我们经常需要更新 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 超时错误或(理想情况下)如何首先避免“已在另一个应用程序域中加载”错误的任何想法?

标签: c#asp.netiistimeout

解决方案


一个更简单/自动的解决方案是使用 ~/App_Offline.htm 文件作为部署过程的一部分(IIS 中的一个功能,因此 WebDeploy 可以避免文件锁定问题)。

修改您的部署过程,因此第一步是App_Offline.htm在 webroot 中创建。IIS 将检测到此文件并立即关闭应用程序域 - 释放任何锁定等。正常部署您的应用程序,没有任何锁定问题,完成后,删除 App_Offline。IIS 收到的下一个请求将启动应用程序域来加载您新部署的版本。

您在 App_Offline.htm 文件中放置的任何内容都会由 IIS 针对所有请求返回,直到您删除该文件。


推荐阅读