c# - 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 超时错误或(理想情况下)如何首先避免“已在另一个应用程序域中加载”错误的任何想法?
解决方案
一个更简单/自动的解决方案是使用 ~/App_Offline.htm 文件作为部署过程的一部分(IIS 中的一个功能,因此 WebDeploy 可以避免文件锁定问题)。
修改您的部署过程,因此第一步是App_Offline.htm
在 webroot 中创建。IIS 将检测到此文件并立即关闭应用程序域 - 释放任何锁定等。正常部署您的应用程序,没有任何锁定问题,完成后,删除 App_Offline。IIS 收到的下一个请求将启动应用程序域来加载您新部署的版本。
您在 App_Offline.htm 文件中放置的任何内容都会由 IIS 针对所有请求返回,直到您删除该文件。
推荐阅读
- c++ - While 循环不检查或条件
- azure-devops - 如何指定在 Mono-Repo 中为 azure-pipelines.yml 构建包的路径?
- python - 导入 seaborn 时出错(matplotlib 参数无效)
- php - 删除电话号码的第一个字符并将它们替换为 PHP subsstr 中的零
- python - 当类从 cv2.KeyPoint 继承时,一个错误会导致崩溃
- php - 如何通过php正确显示目录和子目录中的所有文件
- sql - 将oracle sql转换为hana sql
- java - 在 Firebase Firestore 中保存自定义数据类型
- ios - 在 AVPlayer 中获取重定向 URL
- bash - 使用带有 bash 脚本的 API Gateway 公开 AWS Lambda 函数