Asp.net
iisreset 後應用程序池未啟動
在開始之前,我知道使用 iisreset 被認為是不好的做法,但無論如何都不應該發生這種情況。
我們有什麼:
- 在 Windows Server 2003 R2 上使用 IIS6 的幾台機器(64 位和 32 位)
- 多個 WCF Web 服務(.NET 執行時 2.0)部署在多個應用程序中,每個應用程序都有自己的應用程序池,每個應用程序池在其他 Windows 帳戶下執行。
發生什麼了:
- 所有 appPools 啟動,所有服務執行
- IISReset 被執行(或機器重啟)
- IIS 重新啟動,但並非所有應用程序池都正常啟動。有時它們都會重新啟動,有時一個或多個池無法啟動。但是,它們可以手動啟動。
這是“正常”的 iis 行為嗎?我應該避免使用 iisreset,還是我們在 .NET 程式碼中做錯了什麼?
應用程序池應在 iisreset 時重新啟動,但它們確實在 iis 之外執行(在 COM+ 中)以確保可靠性。這意味著如果應用程序行為不端,它們可能不會回來,但 IIS 和其他應用程序會(應該)回來。所以是的,這是“正常的”。
PS 作為iisreset的驕傲使用者,我也想“OUT”自己。不好的做法? 呸! ;D
原因:
在第一個請求進入之前,IIS 不會立即啟動 ASP.NET 工作程序 (w3wp.exe)。當它顯示“未啟動”時,意味著您嘗試訪問某些 WCF Web 服務(在 iisreset 之後)由於對象持有一些而失敗記憶體中的空間,並且由於無法啟動 appPool,您會收到 Service Unavailable 錯誤。
解決方法:
使用以下命令創建批處理文件並安排它。
淨停止 23svc
淨停止 msftpsvc
網路停止 smtpsvc
不要停止 PleskControlPanel
淨停止 HTTPFilter
iisreset /重啟
淨啟動 w3svc
網路啟動 msftpsvc
網路啟動 smtpsvc
不要啟動 PleskControlPanel
net 啟動 HTTPFilter