2012-07-09 61 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