簡體   English   中英

關閉Web應用程序

[英]Shut Down Web Application

我需要在維護過程中關閉Web應用程序,已經經歷了很多方式,例如將app_offline.htm放在根目錄中,禁用運行時或通過服務器手動禁用它,但是我需要實現的是完全自動化地完成此過程。

我所擁有的是這些日期的關閉開始和結束日期,並標記這些天,即是否需要在那些日期關閉應用程序。

我已經擁有的解決方案是在sql server agent中創建一個作業,該作業在根目錄中以及從根目錄中創建和刪除app_offline.htm文件,但是問題是我需要為我不知道的應用程序的根目錄提供靜態路徑不想做。

您可以使用appcmd命令行實用程序來管理IIS上的站點。 它位於%systemroot%\\system32\\inetsrv\\APPCMD 我認為它僅在IIS v7及更高版本中可用,但不確定是否使用舊版本的IIS。

要停止和啟動站點,命令將如下所示:

%systemroot%\system32\inetsrv\APPCMD stop site <Your Site's Name>

%systemroot%\system32\inetsrv\APPCMD start site <Your Site's Name>

有關appcmd實用程序的更多信息,請訪問: http : //www.iis.net/learn/get-started/getting-started-with-iis/getting-started-with-appcmdexe

這是解決IIS問題以獲取物理路徑的答案的一部分。 可能需要一些調整

         //eg of site = 'Default Web Site'
        //eg of Application = 'MySite'
        var appName = "MySite";
        //Initializes a new instance of the ServerManager class by using the default path of the ApplicationHost.config file.
        ServerManager mgr = new ServerManager();
        var applications = mgr.Sites.Cast<Site>().SelectMany(s => s.Applications);

        var app = applications.SingleOrDefault(a => a.Path.Equals("/" + appName));

        IList<string> physicalPaths = app.VirtualDirectories.Cast<VirtualDirectory>().Select(v => v.PhysicalPath).ToList();

        //Calling dispose manually. Per MSDN, cannot wrap the ServerManager instance in 'Using' as it causes memory leaks
        mgr.Dispose();

        //Releasing the reference to the Server Manager, per MSDN guidance
        mgr = null;
        return physicalPaths;

您在這里遇到的一個問題是Web應用程序是按請求運行的。 您發出請求,請求被處理並返回。 因此,依靠此原理關閉您的應用程序將無法工作。 您需要在Application_Start中注冊某種類型的調度Application_Start ,該調度Application_Start將根據數據庫中的值自行配置。 盡管我不確定哪種調度機制合適,但您可能希望查看Timer (但由於垃圾回收而必須保留對此對象的引用)或System.Threading.Tasks命名空間中的 Task Scheduler。

選擇類可能不對,但這可能是一個起點。

現在,關於您的設計決定,我會完全避免。 如果您的Web應用程序可以創建app_offline.html或將文件重命名為該文件,那么您將無法通過刪除文件來使服務器重新聯機,而無需人工干預。 與其相反,為什么不創建一些可維護的Windows服務,該服務可以查詢數據庫並脫機並再次恢復聯機? 如果您不希望自動使Web應用程序聯機,則不必擔心使其自動脫機。

要考慮的另一件事是在配置應用程序脫機時間時的人為錯誤。 錯誤配置的時間可能會使您的應用程序早晚崩潰。 如果您創建了一些可以刪除並重新啟動Web應用程序的批處理腳本或PowerShell腳本,會不會更容易? 使用PowerShell腳本,可以在不指定任何物理位置的情況下為應用程序查詢IIS。

暫無
暫無

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

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