2009-01-02 72 views

回答

12

如果這是.NET 2.0或更高版本,那麼您可以添加一個「App_offline.htm」文件,向服務器發出請求,將其刪除,然後向服務器發出另一個請求。

只要app_offline.htm文件存在於文件夾中,這一系列事件就會強制ASP.NET卸載應用程序。

斯科特Guthrie的就可以了博客條目: http://weblogs.asp.net/scottgu/archive/2005/10/06/426755.aspx

+0

不會讓系統離線。我希望它重新啓動/重新加載乾淨的緩存/會話等。當我刪除app_offline.htm時,這會默認恢復它? – MikeJ 2009-01-02 19:47:46

6

您也可以停止並啓動與應用程序關聯的應用程序池。

+0

但這是來自IIS的權利。在某些情況下,我可能無法訪問IIS框,因此我正在尋找某種程序化的東西。 – MikeJ 2009-01-02 19:48:26

+1

您可以使用WMI回收應用程序池:http://blogs.iis.net/chrisad/archive/2006/08/30/Recycling-Application-Pools-using-WMI-in-IIS-6.0.aspx – Portman 2009-01-03 03:14:50

+0

很酷。我不知道 – MikeJ 2009-01-03 03:38:46

22

從應用程序中觸摸web.config文件是一個壞主意,海事組織。此外,有一個你修改的文件的想法是一個小黑客,國際海事組織。

的文件明確規定,UnloadAppDomain將關閉應用程序:

UnloadAppDomain允許使用的應用程序編程關機。

您應該可以在應用程序的任何位置進行此調用。請注意,您可能會得到SecurityException,因此請確保運行時爲您提供適當的權限(您可能希望將其放入庫中並撥打電話,然後在GAC中將該庫設置爲具有充分信任的證據) )。

0

如果您不想停止並啓動應用程序池,則可以隨時回收它。

2

通過在應用程序目錄下運行時創建或重命名文件夾,可以安全地重新啓動Web應用程序。很明顯,您需要爲分配給用戶運行應用程序「修改」Web目錄或其下的子目錄的權限。

該方法在 http://www.bartlannoeye.be/blog/restarting-a-.net-web-application-without-restarting-iis

提到我用下面的代碼來執行它在我的情況。修改它在「可寫」子目錄上工作

protected void RestartButton_Click(object sender, EventArgs e) 
{ 
    //restart web app (instead of iisreset) 
    DirectoryInfo dir = new DirectoryInfo(Server.MapPath("restart")); 
    if (dir.Exists) 
    { 
     Directory.Move(dir.FullName, dir.FullName + "ed"); 
    } 
    else 
    { 
     DirectoryInfo dired = new DirectoryInfo(Server.MapPath("restarted")); 
     if (dired.Exists) 
     { 
      Directory.Move(dired.FullName, dir.FullName); 
     } 
     else 
     { 
      Directory.CreateDirectory(dir.FullName); 
     } 
    } 
} 
7

此代碼適用於我。只需調用它來重新加載應用程序。

System.Web.HttpRuntime.UnloadAppDomain(); 

Read more

這種方法只會卸載我們的應用程序。如果你只是把這個方法放在一個ASP.NET web按鈕中,那麼你完全完成了。那麼我們的應用何時會重新加載?實際上,如果你點擊你的按鈕,它會首先啓動我們的方法和卸載應用程序。進一步在我們在那個時候的網頁上也會被重新加載,因爲我們只是點擊一個按鈕並且網頁應該刷新。啓動我們的方法後,頁面刷新過程也會導致我們的應用程序重新加載。

相關問題