lockstock lockstock - 3 months ago 36
C# Question

Get WebClient errors as string

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

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();
      }
  }
}