1. 程式人生 > >基於C#的WEB伺服器執行狀態監測程式

基於C#的WEB伺服器執行狀態監測程式

每天監測網站是否正常執行,之前是一個一個開啟,現在寫一個程式來監測。

步驟1.將檔案配成XML格式方便讀寫,相對於資料庫來說已操作。

XmlDocument dom = new XmlDocument();
            dom.Load(@"D:\ServerList.xml");
            foreach (XmlElement ServerC in dom.DocumentElement.ChildNodes)
            {
                string ID = ServerC.SelectSingleNode("ID"
).InnerText; string Name = ServerC.SelectSingleNode("Name").InnerText; string IP = ServerC.SelectSingleNode("IP").InnerText; }

檔案xml格式:其中encoding=”GB2312”,GB2312是一種可以識別中文的編碼方式,不然會報如下錯誤

這裡寫圖片描述

下圖是正確的xml格式

這裡寫圖片描述

步驟2:通過IP欄位做為url去請求HttpWebRequest,檢視返回的網站狀態HttpStatusCode(此為列舉型別)。

欄位名 說明
Continue 指示客戶端可能繼續其請求。
OK 指示請求成功,且請求的資訊包含在響應中。 這是最常接收的狀態程式碼。
Created 指示請求導致在響應被髮送前建立新資源
Accepted 指示請求已被接受做進一步處理
UseProxy 指示請求應使用位於 Location 頭中指定的URI 的代理伺服器
BadRequest 如果沒有其他適用的錯誤,或者不知道準確的錯誤或錯誤沒有自己的錯誤程式碼,則傳送

此外還要很多的狀態碼,請查閱CSDN

  try
            {
                HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
                HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
                if
(resp.StatusCode == HttpStatusCode.OK) { resp.Close(); return "程式執行中......"; } } catch (WebException e) { return e.ToString() ; } return "程式已終止";

在執行時會出現如下錯誤程式碼:401

這裡寫圖片描述

在網上找了一下解決方案,原因是:請求第一個IP是本地IP,需要使用者認證才能登入。解決方法如下,將使用者電腦登入名和密碼,賦值給NetworkCredential。

 NetworkCredential d = new NetworkCredential("USERNAME", "password");// USERNAME電腦登入名,password登入密碼

                req.Credentials = d;

完整程式碼如下:

 protected void Page_Load(object sender, EventArgs e)
        {

            XmlDocument dom = new XmlDocument();
            dom.Load(@"D:\ServerList.xml");
            foreach (XmlElement ServerC in dom.DocumentElement.ChildNodes)
            {
                string ID = ServerC.SelectSingleNode("ID").InnerText;
                string Name = ServerC.SelectSingleNode("Name").InnerText;
                string IP = ServerC.SelectSingleNode("IP").InnerText;
                HttpContext.Current.Response.Write(ID + "、<a href=" + IP + " target='_blank'>" + Name + "</a>" + "|" + CheckUrlVisit(ServerC.SelectSingleNode("IP").InnerText) + " <br>");
            }

        }
        public string CheckUrlVisit(string url)
        {
            try
            {
                HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
                NetworkCredential d = new NetworkCredential("USERNAME", "password");//遠端伺服器返回錯誤 (401) 未經授權 
                req.Credentials = d;
                HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
                if (resp.StatusCode == HttpStatusCode.OK)
                {
                    resp.Close();
                    return "程式執行中......";
                }
            }
            catch (WebException e)
            {
                return e.ToString();
            }
            return "程式已終止";

        }

執行結果如下:

這裡寫圖片描述