2012-07-09 65 views
0

假設的處理HTTP網頁響應異常的常規方式:HttpWebRequest的 - 區分客戶端和服務器異常

void BeginGetResponseCallback(IAsyncResult asyncResult) 
    { 
     try 
     { 
      var req = asyncResult.AsyncState as HttpWebRequest; 
      using (HttpWebResponse response = req.EndGetResponse(asyncResult) as HttpWebResponse) 
      { 
       ... 
      } 
     } 
     catch (WebException we) 
     { 
      ... 
     } 
    } 

這裏的問題是,用相同的錯誤代碼引發WebException(「未找到」)可如果摔出要麼服務器存在連接問題,要麼服務器實際以「未找到」狀態回覆。這在HttpWebRequest的實現中似乎是一個錯誤。

我們應該如何正確區分這種情況,即拋出的異常「源於」客戶端還是服務器?

編輯1:我在Windows Phone 7.1平臺上運行此代碼。

Edit2:建議的WebException的Status屬性在WP7上實際上是無用的,因爲它始終設置爲UnknownError,即使它應該是ProtocolError。 WP7上可能的HttpWebRequest實現錯誤?

Edit3:Silverlight中WebException.Status的MSDN文檔頁面聲明不支持ProtocolError枚舉成員,所以這解釋了它......不知道爲什麼它不受支持。

+0

您可能想查看您返回的異常的[狀態成員](http://msdn.microsoft.com/en-us/library/system.net.webexception.status.aspx) - [one (http://msdn.microsoft.com/zh-cn/library/system.net.webexceptionstatus.aspx)將幫助您確定發生錯誤的位置。 – 2012-07-09 09:27:21

回答

0

您可以檢查WebExceptionStatus字段。這將有助於在高層告訴你發生錯誤的位置。你可以找到它的文檔here和一個非常簡單的樣本代碼here

+0

當我查閱文檔,我希望你是正確的,WebExceptionStatus.ProtocolError是我需要的值,但不幸的是狀態總是設置爲WebExceptionStatus.UnknownError。我應該首先提到:代碼在Windows Phone 7.1平臺上運行。 – 2012-07-09 09:45:17

+0

@GabrielS。你是否也查看了異常的完整消息屬性?的InnerException? etc. – reuben 2012-07-09 09:48:26

+0

我只是有,但沒有什麼有用或可靠的幫助我。 「遠程服務器返回一個錯誤:NotFound。」作爲消息在這兩種情況下,相同的內部異常...唯一有點模糊的有用的指標是,WebException.Response.StatusDescription,以及其他一些成員,是一個空字符串,當服務器沒有實際響應,我覺得很不滿意。 – 2012-07-09 09:57:01