C# 将WebClient错误获取为字符串

C# 将WebClient错误获取为字符串,c#,web-services,webclient,C#,Web Services,Webclient,我有一个测试web服务的诊断工具 我希望该工具在出现问题时进行报告,因此我部署了一个有合同问题的服务来测试它 当我浏览到它时,我会看到一个带有非常描述性信息的页面,例如: ExceptionDetails,可能由IncludeExceptionDetailInFaults=true创建, 其值为: System.InvalidOperationException:调用WSDL时引发异常 导出扩展: System.ServiceModel.Description.DataContractSeria

我有一个测试web服务的诊断工具

我希望该工具在出现问题时进行报告,因此我部署了一个有合同问题的服务来测试它

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

ExceptionDetails,可能由IncludeExceptionDetailInFaults=true创建, 其值为: System.InvalidOperationException:调用WSDL时引发异常 导出扩展:
System.ServiceModel.Description.DataContractSerializeRopection行为 合同:类型XXX的DataContract无法添加到DataContractSet,因为类型 命名空间XXX中具有相同数据协定名称XXX的XXX已存在 合同不对等等

我想要的是能够呼叫:

myErrorMsg = WebClient.DownloadString("MyBadService.svc");
并以字符串形式获取此有用的错误消息,但我得到以下WebException:

远程服务器返回错误:(500)内部服务器错误

我如何才能获得与我在浏览器中收到的错误消息相同的返回字符串,而不获得异常


谢谢。

您必须捕获异常并阅读响应

catch (WebException exception)
{
  string responseText;

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

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

500错误意味着您的网站意外终止。如果由于连接错误、名称解析失败等原因引发WebException,这将导致崩溃。在尝试从中获取流之前,请检查以确保存在repsonse。哈哈!终于找到了解决办法。非常感谢@ccellar