Asp.net

ASP.NET 中的無縫部署(IIS 在新的工作程序準備好之前殺死工作程序)

  • November 28, 2013

我正在嘗試將 .NET Web 應用程序部署到 IIS (7.5),而不會給使用者帶來任何麻煩。我已經確定禁用重疊回收是錯誤的,但我每次仍然遇到同樣的問題。

每次我為站點上傳新的二進製文件時,IIS 都會在工作程序啟動新程序之前終止它。因此,每次我上傳新的二進製文件時,使用者都會收到以下錯誤消息:

“/”應用程序中的伺服器錯誤。無法載入文件或程序集“MyApplicationWeb”或其依賴項之一。該程序無法訪問該文件,因為它正被另一個程序使用。(來自 HRESULT 的異常:0x80070020)

我不知道如何無縫地做到這一點。現在我只是上傳二進製文件;但是當上傳發生(或本地副本)時,它會給出上面引用的行為。我也嘗試使用網路花園,但結果相同。

我不是在尋找什麼:

  • 如何使用外部負載平衡器解決它(這是一個功能性解決方案,但它對於少數伺服器來說是一個糟糕的解決方案,如果只有一個伺服器,它根本不起作用)
  • 如何在自定義錯誤頁面中通過刷新來創建 hack-around(因為它有一些明顯的問題,但更重要的是,它根本不適用於 Web 服務/ajax)。

我真的認為這應該是可行的http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/24e3c22e-79a9-4f07-a407-dbd0e7f35432.mspx?mfr=true

更新:在上面的文章中,他們說:

但是,由於關閉或啟動的關閉超時值是可配置的,因此如果工作程序未在時間限制內完成對現有請求的服務,則可以在它仍在為請求提供服務時終止它。

我不知道在哪裡可以找到這個值,也不知道它是什麼預設值。如果它少於幾秒鐘,它可能會解釋我的結果。

附言。我將它發佈在 SO 而不是 SF/Webmasters 等上,因為我認為這種知識對於那些不積極參與開發的人來說可能是最少的,我希望這沒關係。

在部署 ASP.Net 應用程序時,我在伺服器上創建一個新文件夾並更改 IIS 中網站的主目錄。這提供了零停機時間部署和快速回滾位置,以防出現不可預見的問題。在未來的更新中,我廢棄舊版本並重複該過程,以便始終有一個回滾位置。

更新 - 關機時間限制

http://www.iis.net/ConfigReference/system.applicationHost/applicationPools/add/processModel詳細介紹了為工作人員配置關閉時間限制的詳細資訊。預設值為 1 分 30 秒。在連結頁面中查找 shutdownTimeLimit 部分。

更新 - 更多資訊

類似的問題有一個很好的答案

這樣做的要點是,由於覆蓋現有文件,複製機制對文件採取了排他性鎖定,並且如果不使用 app_offline.htm 或上述建議的機制,就不可能進行無縫部署。閱讀連結的答案,因為它更深入。

引用自:https://stackoverflow.com/questions/5358020