我想創建一個小型的Windows應用程序會自動每一段時間去我的網站,並檢查其運行良好,如果它發現它,沒有工作或有錯誤「示例:404,網絡錯誤,連接到數據庫失敗「它會在我的屏幕上顯示一條消息。我的網站已關閉,無法正常工作或出現錯誤?
我如何知道程序中存在使用任何.NET語言的錯誤?
我想創建一個小型的Windows應用程序會自動每一段時間去我的網站,並檢查其運行良好,如果它發現它,沒有工作或有錯誤「示例:404,網絡錯誤,連接到數據庫失敗「它會在我的屏幕上顯示一條消息。我的網站已關閉,無法正常工作或出現錯誤?
我如何知道程序中存在使用任何.NET語言的錯誤?
使用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;
// ...
}
}
你可以鉤住高達Timer
的Tick
事件或東西定期進行檢查。
您還應該使用DownLoadStringAsync(),以便您可以設置合理的超時時間。 – 2009-03-03 20:18:53
使用HttpWebRequest,並將其封裝在WebException的try catch中。異常對象中的錯誤代碼將爲您提供代碼。 404等。如果它是500,則可以打印該消息。
使用System.Net.WebClient對象。它比HttpWebRequest更容易使用。它有一個「DownloadString」方法,可以將URL的內容下載到字符串中。如果服務器返回500,那麼該方法也可能會引發WebException錯誤。對於其他錯誤,您可以解析字符串並查找關鍵字。
爲什麼要麻煩?你可以得到廉價的從提供更好的解決方案像RedAlert
的好處大約是這樣的:
1)它可以測試你的網站從你的防火牆之外,因此它可以檢測到更廣泛的問題。
2)這是一個公正的第三方,所以如果您需要SLA,您可以證明正常運行時間。
3)對於小額保費,您可以嘗試並診斷問題。
4)當有問題時,它可以頁面或電子郵件給你。
5)您不需要委託新的服務器。我聽起來像是給傢伙的廣告,但我保證我不會爲他們工作或得到回扣。我剛剛對我們的服務器的服務感到滿意。
順便說一句:我檢查了定價,它是每個網站/月大約20美元。因此,您可以花更少的時間支付一年的服務費用,而不需要花費自己的時間。
爲什麼要麻煩?您可以從InternetSeer等提供商那裏免費獲得相同的解決方案。甚至谷歌網站管理員工具也提供了類似的服務(儘管沒有任何複雜的地方)。我沒有看到什麼證明每個網站每月20美元的理由,當其他人收取相同服務的0美元時。 – 2009-03-03 20:13:32
如果你這樣做,創建一個特殊的頁面,它可以執行任何特殊的子系統,比如數據庫,文件IO等,並以純文本形式提供結果,而不是html。這將允許您更容易地解析返回的數據,並且還會捕獲可能不會導致404或500 HTTP錯誤的數據庫或IO問題。
如果您希望在網站停用時收到電子郵件/短信,請嘗試使用基於網絡的解決方案Are My Sites Up。
嘗試AdventNet的應用程序管理器(http://www.manageengine.com/products/applications_manager/),它是免費的5個監視,並提供卓越的監控能力
你可以配置可以像發送電子郵件等發生故障的情況下完成的動作
想要執行相同的功能我首先查看了第三方解決方案。一種免費且相當準確的服務是MonitorUs。
但是,如果你想建立自己的,那麼我會有一個建議。考慮使用目請求,而不是GET請求的:
的HEAD方法等同於GET 不同的是在響應服務器不能返回 消息正文。響應於HEAD請求 的HTTP 頭中包含的元信息應當與響應於GET請求發送的信息 相同。 此方法可用於獲取 有關實體 的元信息,該請求隱含該請求,而不是 傳遞實體主體本身。 此方法通常用於測試 有效性的超文本鏈接, 可訪問性和最近的 修改。 w3.org
這是a link to Peter Bromberg's文章,解釋如何在C#中執行頭部請求。
當然,任何程序都將受到您所在網絡的支配。 – Terry 2009-03-03 20:05:24