【问题标题】:Get WebClient errors as string以字符串形式获取 WebClient 错误
【发布时间】:2011-10-25 13:48:32
【问题描述】:

我有一个测试网络服务的诊断工具。

我希望工具在出现问题时进行报告,所以我部署了一个合约出现问题的服务来测试它。

当我浏览到它时,我会看到一个带有非常描述性消息的页面,例如:

一个异常详细信息,可能由 IncludeExceptionDetailInFaults=true 创建, 其值为: System.InvalidOperationException:调用 WSDL 时引发异常 导出扩展:
System.ServiceModel.Description.DataContractSerializerOperationBehavior 合同:类型 XXX 的 DataContract 无法添加到 DataContractSet,因为类型 名称空间 XXX 中具有相同数据合约名称 XXX 的 XXX 已存在 并且合同不等价等等。

我想要的是能够打电话:

myErrorMsg = WebClient.DownloadString("MyBadService.svc");

并以字符串形式获取此有用的错误消息,但是我得到以下 WebException:

远程服务器返回错误:(500) Internal Server Error.

如何才能在浏览器中以字符串形式返回我收到的相同错误消息,而不会出现异常?

谢谢。

【问题讨论】:

  • 500 错误意味着您的网站意外终止。

标签: c# web-services webclient


【解决方案1】:

您必须捕获异常并读取响应。

catch (WebException exception)
{
  string responseText;

  var responseStream = exception.Response?.GetResponseStream();

  if (responseStream != null)
  {
      using (var reader = new StreamReader(responseStream))
      {
         responseText = reader.ReadToEnd();
      }
  }
}

【讨论】:

  • 如果由于连接错误、名称解析失败等原因引发 WebException,这将爆炸。在尝试从中获取流之前检查以确保有响应。
  • 哈哈!终于得到了解决方案。非常感谢@ccellar
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-05
  • 2016-02-20
  • 2021-02-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多