我正在尝试将 .NET Web 应用程序部署到 IIS (7.5),而不会给用户带来任何麻烦。我已经确定 禁用重叠回收是错误的 但我每次仍然遇到同样的问题。
每次我为站点上传新的二进制文件时,IIS 都会在工作进程启动新进程之前终止它。因此,每次我上传新的二进制文件时,用户都会收到此错误消息:
Server Error in '/' Application. Could not load file or assembly 'MyApplicationWeb' or one of its dependencies. The process cannot access the file because it is being used by another process. (Exception from HRESULT: 0x80070020)
我不知道如何无缝地做到这一点。现在我只是上传二进制文件;但是当上传发生(或本地复制)时,它会给出上面引用的行为。我也尝试使用网络花园,但结果相同。
我不是在寻找什么:
鉴于 http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/24e3c22e-79a9-4f07-a407-dbd0e7f35432.mspx?mfr=true,我真的认为这应该是可行的
更新:
在上面的文章中,他们说:
However, because the shutdown timeout value of a shutdown or startup is configurable, the worker process can be terminated while it is still serving requests if it does not finish servicing existing requests within the time limit.
我不知道在哪里可以找到这个值,也不知道它是什么默认值。如果它少于几秒钟,它可能会解释我的结果。
附:我将它发布在 SO 而不是 SF/Webmasters 等上,因为我认为这种知识在不积极参与开发的人中可能很少,我希望这没问题。
最佳答案
部署 ASP.Net 应用程序时,我在服务器上创建一个新文件夹并更改 IIS 中网站的主目录。这提供了零停机部署和在出现不可预见的问题时的快速回滚位置。在 future 的更新中,我废弃旧版本并重复该过程,以便始终有一个回滚位置。
更新 - 关机时间限制
在 http://www.iis.net/ConfigReference/system.applicationHost/applicationPools/add/processModel 中详细介绍了为工作人员配置关闭时间限制的详细信息。 .默认值为 1 分 30 秒。在链接页面中查找 shutdownTimeLimit 部分。
更新 - 更多信息
Similar question with a great answer
其要点是,由于覆盖现有文件,复制机制对文件进行了独占锁定,并且在不使用 app_offline.htm 或上述建议的机制的情况下不可能进行无缝部署。阅读链接的答案,因为它更深入。
关于asp.net - 在 ASP.NET 中无缝部署(IIS 在新工作进程准备好之前杀死工作进程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5358020/