Search code examples
.netwcfrestchannelfactoryprotocolexception

Getting error detail from WCF REST


I have a REST service consumed by a .Net WCF client.

When an error is encountered the REST service returns an HTTP 400 Bad Request with the response body containing JSON serialised details.

If I execute the request using Fiddler, Javascript or directly from C# I can easily access the response body when an error occurs.

However, I'm using a WCF ChannelFactory with 6 quite complex interfaces. The exception thrown by this proxy is always a ProtocolException, with no useful details.

Is there any way to get the response body when I get this error?


Update

I realise that there are a load of different ways to do this using .Net and that there are other ways to get the error response. They're useful to know but don't answer this question.

The REST services we're using will change and when they do the complex interfaces get updated. Using the ChannelFactory with the new interfaces means that we'll get compile time (rather than run time) exceptions and make these a lot easier to maintain and update the code.

Is there any way to get the response body for an error HTTP status when using WCF Channels?


Solution

  • Don't use ChannelFactory :-) Seriously though. Why would you create a REST interface and then use the WCF client proxy. What is the benefit of using the REST service? Why not just use wsHttpBinding? With the HttpClient class from the REST starter kit you can make standard HTTP requests and then deserialize the response using the DataContractSerializer.

    E.g.

    var httpClient = new HttpClient();
    var content = httpClient.Get("http://example.org/customer/45").Content;
    var customer = content.ReadAsDataContract<Customer>()