2009-03-03 47 views
1

我想創建一個小型的Windows應用程序會自動每一段時間去我的網站,並檢查其運行良好,如果它發現它,沒有工作或有錯誤「示例:404,網絡錯誤,連接到數據庫失敗「它會在我的屏幕上顯示一條消息。我的網站已關閉,無法正常工作或出現錯誤?

我如何知道程序中存在使用任何.NET語言的錯誤?

+0

當然,任何程序都將受到您所在網絡的支配。 – Terry 2009-03-03 20:05:24

回答

7

使用WebClient很容易。這將是這個樣子:

WebClient client = new WebClient(); 
    try 
    { 
     string response = 
      client.DownloadString("http://www.example.com/tester.cgi"); 

     // We at least got the file back from the server 

     // You could optionally look at the contents of the file 
     // for additional error indicators  
     if (response.Contains("ERROR: Something")) 
     { 
      // Handle 
     } 
    } 
    catch (WebException ex) 
    { 
     // We couldn't get the file. 
     // ... handle, depending on the ex 
     // 
     // For example, by looking at ex.Status: 
     switch (ex.Status) 
     { 
      case WebExceptionStatus.NameResolutionFailure: 
       // ... 
      break; 
      // ... 
     } 
    } 

你可以鉤住高達TimerTick事件或東西定期進行檢查。

+0

您還應該使用DownLoadStringAsync(),以便您可以設置合理的超時時間。 – 2009-03-03 20:18:53

2

使用HttpWebRequest,並將其封裝在WebException的try catch中。異常對象中的錯誤代碼將爲您提供代碼。 404等。如果它是500,則可以打印該消息。

2

使用System.Net.WebClient對象。它比HttpWebRequest更容易使用。它有一個「DownloadString」方法,可以將URL的內容下載到字符串中。如果服務器返回500,那麼該方法也可能會引發WebException錯誤。對於其他錯誤,您可以解析字符串並查找關鍵字。

5

爲什麼要麻煩?你可以得到廉價的從提供更好的解決方案像RedAlert

的好處大約是這樣的:

1)它可以測試你的網站從你的防火牆之外,因此它可以檢測到更廣泛的問題。

2)這是一個公正的第三方,所以如果您需要SLA,您可以證明正常運行時間。

3)對於小額保費,您可以嘗試並診斷問題。

4)當有問題時,它可以頁面或電子郵件給你。

5)您不需要委託新的服務器。我聽起來像是給傢伙的廣告,但我保證我不會爲他們工作或得到回扣。我剛剛對我們的服務器的服務感到滿意。

順便說一句:我檢查了定價,它是每個網站/月大約20美元。因此,您可以花更少的時間支付一年的服務費用,而不需要花費自己的時間。

+0

爲什麼要麻煩?您可以從InternetSeer等提供商那裏免費獲得相同的解決方案。甚至谷歌網站管理員工具也提供了類似的服務(儘管沒有任何複雜的地方)。我沒有看到什麼證明每個網站每月20美元的理由,當其他人收取相同服務的0美元時。 – 2009-03-03 20:13:32

1

如果你這樣做,創建一個特殊的頁面,它可以執行任何特殊的子系統,比如數據庫,文件IO等,並以純文本形式提供結果,而不是html。這將允許您更容易地解析返回的數據,並且還會捕獲可能不會導致404或500 HTTP錯誤的數據庫或IO問題。

0

如果您希望在網站停用時收到電子郵件/短信,請嘗試使用基於網絡的解決方案Are My Sites Up

3

想要執行相同的功能我首先查看了第三方解決方案。一種免費且相當準確的服務是MonitorUs

但是,如果你想建立自己的,那麼我會有一個建議。考慮使用目請求,而不是GET請求的:

的HEAD方法等同於GET 不同的是在響應服務器不能返回 消息正文。響應於HEAD請求 的HTTP 頭中包含的元信息應當與響應於GET請求發送的信息 相同。 此方法可用於獲取 有關實體 的元信息,該請求隱含該請求,而不是 傳遞實體主體本身。 此方法通常用於測試 有效性的超文本鏈接, 可訪問性和最近的 修改。 w3.org

這是a link to Peter Bromberg's文章,解釋如何在C#中執行頭部請求。

相關問題