2008-11-13 65 views
2

假設情況:比方說,我正在使用第三方.net程序集,正在使用的ASP.Net網絡系統中,我只是偶爾會偶爾崩潰。當它這樣做時,所有對它的調用都會拋出異常,直到系統重新啓動。顯然,這有點不理想。有沒有辦法編程「重啓」.net程序集?

有沒有辦法從異常處理程序重新啓動該程序集?

(附錄:當然,這裏的正確答案是讓供應商修正他們的錯誤,但是,有問題的供應商有些......「不情願」回答我們的電子郵件。今天早上出現了一段MacGyver-eqsue管道膠帶,然後我們意識到沒有人知道如何去做)

+0

當然,這個供應商並不是提供這種組件的唯一供應商。也許你可以找到另一個更好支持的產品? – 2008-11-13 23:27:30

回答

7

調用HttpRuntime.UnloadAppDomain()將強制應用程序自行終止並在下一個Web請求到達時重新啓動。這會導致所有內容都從頭開始重新加載,並且應該消除損壞的程序集數據。當然,這會殺死任何活動的會話,但是如果應用程序本質上崩潰了,這可能是可以接受的。

2

假設......回到你的第三方供應商,讓他們修理它們錯誤。

+0

這當然是正確的答案。這是我們試圖在問題上拍一些管道膠帶,同時我們試圖說服供應商確實是他們的問題。 – 2008-11-13 19:04:23

+0

你有沒有考慮過你可能沒有正確使用第三方程序集的可能性?也許你沒有在使用後釋放資源,內存或sql連接......我認真地在做任何激烈的事情之前先檢查它們。 – BoltBait 2008-11-13 19:22:38

+0

簡短的回答是,我們一直在考慮這一點。這是一箇舊的skool COM dll,其中包含一個(可憐的).net包裝器,並且這個東西泄漏了整個地方的內存。我們確信我們已經解決了我們現在可能遇到的每個資源問題,並且它的工作原理*更好*,而不是*正確。* – 2008-11-13 19:39:14

4

可以回收應用程序池,但是這將揭開序幕所有當前用戶,並失去其會話信息 - 如果網站是由錯誤的DLL反正

+0

這比編程改變​​web.config更好。 – 2008-11-13 21:06:13

4

OK,真正的答案已經在該區這可能無所謂.. 。當Web.Config文件更改時,應用程序將重新編譯並重置應用程序池。

所以,(我討厭這麼說)以編程方式更改您的web.config文件。

順便說一句,我不建議這樣做,所以你可以保存你的投票給其他人。

0

這可能是因爲當它異常崩潰時,它仍然會使活動進程保持活動狀態,從而導致任何後續嘗試調用該DLL。如果是這樣,你可能能夠以編程方式找到並殺死它,這可能會解決需要重新啓動的問題。

0

除修改web.config之外,您還可以在bin文件夾中創建任意文件。這會重啓你的應用程序。

相關問題