簡體   English   中英

發生不可恢復的錯誤后,如何在IIS上終止ASP.NET應用程序?

[英]How can I terminate an ASP.NET application on IIS following an unrecoverable error?

Supopse我有一個未處理的異常(或一個已知的嚴重,不可恢復的錯誤)。 最可怕的情況是安全漏洞,但它可能適用於任何情況,這意味着我的狀態非常糟糕,以至於我無法期望繼續安全進行下去。

我該怎么辦?

在傳統應用程序中,通常的技術是快速結束我的過程。 盡快地。 我正在調用Process.Exit,TerminateProcess,die或任何其他環境具有“ END。NOW”功能的工具。 埃里克·利珀特(Eric Lippert)的帖子很好地表達了這種態度的理由。

在IIS上運行的生產ASP.NET應用程序中,這不是那么簡單。 我當然可以結束當前過程,並在事件日志或任何地方發出錯誤提示。 本質上就是任何未處理的異常都會發生的情況。 但是,下次發出請求時,IIS只會啟動一個新的工作進程。 如果我的致命錯誤是暫時性問題,那就太好了。

但是,如果我的問題在我的整個過程中仍然存在,那么新的問題將再好不過了。 甚至可以通過初始化代碼或重新嘗試使其變得更加復雜。 另外,如果IIS在同一個應用程序池中運行多個工作進程,那么即使殺死我的進程也不會殺死該應用程序。 從邏輯上講,所有其他工人也可能被抽水,只是還不知道。

到目前為止,我只想出兩種選擇。

  • 結束過程,並希望取得最好的成績。 知道該應用程序將重新啟動,這與“ catch(Exception){}”幾乎相同。 很難令人滿意。
  • “出局”告訴IIS禁用應用程序,停止IIS,計算機等。這似乎是一種殘酷的手段。 此外,我猜想它可能需要提升的安全憑證。 在終止可能受損的進程的過程中,獲得這些進程似乎是一個糟糕的時機。

我能想到的是:

  1. 您可以繼續使用IIS中名為“快速失敗保護”的應用程序池的高級設置,根據需要將失敗間隔設置足夠長的時間,並將“ 最大失敗次數”設置為1,然后繼續引發異常並讓IIS認為此應用程序池無法正常工作,因此它將向客戶端發送回Service Unavailable服務 ,甚至重置連接(取決於您的設置)。 有關更多詳細信息,請在此處進行檢查: 應用程序池的故障設置 但是,您需要非常小心,不要過度使用,我的意思是您需要編寫一個非常好的應用程序,所有異常均已正確處理,IIS只能真正檢測到您想要終止應用程序的異常,否則可能只有一個用戶單擊即可降低您的網站。

  2. 另一個解決方案是繼續將其編寫為您自己的代碼,我的意思是您可以通過某種方式記錄這種錯誤,例如創建一個名為SystemCrashed的文件,然后終止該應用程序,然后檢查文件是否存在於Application_Startup上 ,除了終止如果找到文件,則應用程序。 像鎖一樣的東西。 這需要更多的代碼,但可能比IIS設置更安全,我的意思是,只要您正確地刪除了鎖,就不會有太多的殺傷力。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM