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.
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? 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.
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.
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.
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(); } } }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With