ASP.NET中的无缝部署(IIS在新工作进程准备好之前杀死工作进程)

ste*_*fan 13 asp.net deployment iis worker-process

我正在尝试将.NET Web应用程序部署到IIS(7.5),而不会给用户带来任何麻烦.我确保禁用重叠回收是错误的,但我每次都遇到同样的问题.

每次我为站点上传新的二进制文件时,IIS都会在启动新进程之前终止该进程.所以每次上传新的二进制文件时,用户都会收到以下错误消息:

'/'应用程序中的服务器错误.无法加载文件或程序集"MyApplicationWeb"或其依赖项之一.该进程无法访问该文件,因为该文件正由另一个进程使用.(HRESULT异常:0x80070020)

我不知道如何无缝地做到这一点.现在我只是上传二进制文件; 但是当上传发生时(或本地副本),它将给出上述引用的行为.我也尝试使用Web园,但结果相同.

我不想要的:

  • 如何使用外部负载平衡器来解决这个问题(这是一个功能性的解决方案,但对于少数服务器而言,这是一个糟糕的解决方案,如果只有一台服务器,它将无法工作)
  • 如何在自定义错误页面中创建一个带有刷新的hack-around(因为它有一些明显的问题,但更重要的是它根本不适用于web服务/ ajax).

我认为这应该是可行的,因为http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/24e3c22e-79a9-4f07-a407-dbd0e7f35432.mspx?mfr=true

更新:在上面的文章中他们说:

但是,由于关闭或启动的关闭超时值是可配置的,因此如果工作进程在时间限制内未完成为现有请求提供服务,则它仍可在服务请求时终止.

我不知道在哪里可以找到这个值,也不知道它是什么默认值.如果它少于几秒钟就可以解释我的结果.

PS.我发布它是在SO而不是SF /网站管理员等,因为我认为这种知识可能在那些不积极参与开发的人中很少,我希望这是可以的.

det*_*lor 17

部署ASP.Net应用程序时,我在服务器上创建一个新文件夹,并在IIS中更改网站的主目录.这可以在出现无法预料的问题时提供零停机时间部署和快速回滚位置.在将来的更新中,我废弃旧版本并重复该过程,以便始终存在单个回滚位置.

更新 - 关闭时间限制

有关为工作人员配置关闭时间限制的详细信息,请参见http://www.iis.net/ConfigReference/system.applicationHost/applicationPools/add/processModel.默认值为1分30秒.在链接页面中查找shutdownTimeLimit部分.

更新 - 更多信息

类似的问题有一个很好的答案

这样做的要点是,由于覆盖现有文件,复制机制对文件进行独占锁定,并且不使用app_offline.htm或上述建议的机制就无法进行无缝部署.阅读相关答案,因为它更深入.