Get WebClient errors as string

lockstock picture lockstock · Aug 12, 2011 · Viewed 13.5k times · Source

I have a diagnostic tool which tests a web service.

I want the tool to report when there are problems, so I have deployed a service with a problem with the contract to test it.

When I browse to it I get a page with a very descriptive message such as:

An ExceptionDetail, likely created by IncludeExceptionDetailInFaults=true, whose value is: System.InvalidOperationException: An exception was thrown in a call to a WSDL export extension:
System.ServiceModel.Description.DataContractSerializerOperationBehavior contract: DataContract for type XXX cannot be added to DataContractSet since type XXX with the same data contract name XXX in namespace XXX is already present and the contracts are not equivalent etc..

What I want is to be able to call:

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

and get this useful error message as a string, however I get the following WebException:

The remote server returned an error: (500) Internal Server Error.

How can I get the same error message I received in the browser returned as a string, without getting an exception?

Thanks.

Answer

ccellar picture ccellar · Aug 12, 2011

You have to catch the exception and read the response.

catch (WebException exception)
{
  string responseText;

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

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