Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 261
lockstock Avatar asked Aug 12 '11 06:08

lockstock


People also ask

How do I catch an error on WebClient?

While Initialising WebClient As mentioned in the code block, whenever a 5XX/4XX Error occurs, we can throw a user defined exception, and then execute error handling logic based on those user defined exceptions. Once this error Handler is defined, we can add it in the WebClient Initialisation.

What exception does WebClient throw?

What exception does WebClient throw? As you can see, ServiceException includes both a message and a status code. That's the exception that gets included in the Mono publisher. It's also the exception that gets thrown when the WebClient encounters a 405 HTTP status code.

How do you handle Webclientrequestexception?

you can create a method which is your proxy to call any external resource , which use webClient in itself. then you can apply AOP pattern to it and handle exception in this way.

Why do we use WebClient in C#?

The WebClient class provides common methods for sending data to or receiving data from any local, intranet, or Internet resource identified by a URI. The WebClient class uses the WebRequest class to provide access to resources.


1 Answers

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();       }   } } 
like image 126
ccellar Avatar answered Sep 20 '22 14:09

ccellar