程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> 創建windows服務,定時監控網站應用程序池

創建windows服務,定時監控網站應用程序池

編輯:關於ASP.NET

最近網站總是報"Timer_Connection"錯誤,導致該網站所使用的應用程序池由於錯誤過多停止運行,網站也就出現了service unvaliable,無法訪問,在網上查了很多資料, 結果很讓人無奈,這個問題已經困擾我了很久,一直沒有得到解決,後來同事發來一篇文章讓我有了新的解決方法,雖然不能根本解決這個報錯,但可以快速清空並恢復指定的應 用程序池

不多說了,看看下面這個方法吧,主要是創建一個連接(如你要監控的網站的一個地址),如果能訪問到這個頁面說明網站應用程序池沒有問題,如果不能訪問,也就是會報錯 喽,這時我們就可以調用下面的方法,去清空並重啟該應用程序池,代碼如下:

public void RestartAppPool()
    {
      System.Net.HttpWebRequest request = (HttpWebRequest)WebRequest.Create(System.Configuration.ConfigurationSettings.AppSettings

["webfile"].ToString());
      request.KeepAlive = false;
      try
      {
        System.Net.HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        response.Close();
      }
      catch
      {
        DirectoryEntry root = new DirectoryEntry("IIS://localhost/W3SVC/AppPools/" + System.Configuration.ConfigurationSettings.AppSettings

["AppPoolName"].ToString());
        root.Invoke("Start", null);
        root.CommitChanges();
        AddEventLog("重啟應用程序池於:"+DateTime.Now.ToLongTimeString());
        root.Close();
      }
    }

這裡有一點需要注意,DirectoryEntry需要引用C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.DirectoryServices.dll

另外還要Using System.Net

而我則是創建了一個windows service來定時去檢查應用程序池的狀態.

另外,大家在創建windows service的時候可不要忘記在安裝進程控件(serviceProcessInstaller1)屬性中將Account設置為Local System,否則在您安裝這個服務時會提示 您輸入用戶名及密碼,如下圖

這時您需要在安裝服務之前創建一個windows賬戶,並且需要在策略中"作為服務登錄"添加您之前創建的用戶,當然這樣做實在很麻煩,為了不在安裝中出現這個問題,一定 要將Account設置為Local System,本人之前就遇見了這個問題,最後不得不在網上又搜了一圈才明白到底是怎麼回事,希望您在遇到這個問題是對您有所幫助哦.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved