2012-07-13 126 views
1

我有一個調用遠程服務器上的Web服務的ASP.NET Web應用程序。我希望應用程序能夠檢測到由於遠程服務器上的任何故障而無法訪問Web服務。在ASP.NET中檢測Web服務失敗

應用程序可以區分遠程服務器上的故障和其他情況下的故障是非常重要的。例如,它必須能夠檢測到防火牆阻止的Web服務URL和遠程服務器上的Http服務不可用之間的區別。

任何人都可以提出一個這樣做的方法嗎?理想情況下,解決方案將使用HttpWebResponse對象上返回的HttpStatusCode。

+0

你使用WCF,一個老式的Web引用,或者只是手動構建一個HttpWebResponse? – 2012-07-13 10:50:56

+0

WCF,但要測試連接,使用HttpWebResponse可能是最輕量級的方法。 – 2012-07-13 10:54:23

回答

1

在調用遠程服務器的代碼周圍放置一個try子句,然後捕獲WebException。 WebException對象內部將是一個HttpWebResponse,其中包含有關遠程服務器響應的狀態碼和其他可口信息。

try 
{ 
    var request = (HttpWebRequest)WebRequest.Create("https://remote.service.com/getdata"); 
    request.Method = "GET"; 
    HttpWebResponse response = request.GetResponse() as HttpWebResponse 
} 
catch (WebException wx) 
{ 
    HttpWebResponse webExceptionResponse = (HttpWebResponse)wx.Response; 
    var sr = new StreamReader(webExceptionResponse.GetResponseStream(), Encoding.UTF8); 
    string jsonResult = sr.ReadToEnd(); 
    HttpStatusCode status = webExceptionResponse.StatusCode; 
} 
+0

感謝sanpaco,我看到WebException對象上還有一個狀態碼,並帶有其他有用的信息。 我應該能夠安全地使用Http 500狀態來確定Web服務本身是否有任何應用程序問題。 任何想法如何我的哪種狀態顯示託管該服務的Web服務器已關閉? – 2012-09-07 18:31:40

+0

通常'503 Service Unavailable'指示遠程服務器已關閉或關閉。儘管如果服務只在防火牆後面,我不確定是否會得到相同的結果。根據我的經驗,像這樣調用其他服務,我通常只需要調用服務的管理員來驗證爲什麼我會得到特定的錯誤。但是我認爲你很安全,假設任何500範圍狀態意味着遠程服務器有問題。 – sanpaco 2012-09-07 20:23:27