bombai
bombai

Reputation: 967

WCF Post Request content type text/xml

i have a problem with a post method..

Here is my interface

    public interface Iinterface
    {
    [OperationContract]
    [WebInvoke(Method = "POST", UriTemplate = "inventory?")]
    System.IO.Stream  inventory(Stream data);
    }

And the function..

    public System.IO.Stream inventory(System.IO.Stream data)
    {
    //Do something
    }

Well, if from the client sends with content-type text/plain or application/octet-stream works perfect, but the client cant change the content type, and his is text/xml, and i obtain an error..

The exception message is 'Incoming message for operation 'inventory' (contract    
'Iinterface' with namespace 'http://xxxx.com/provider/2012/10') contains an
unrecognized http body format value 'Xml'. The expected body format value is 'Raw'. 
This can be because a WebContentTypeMapper has not been configured on the binding.

Someone can help me?

Thanks.

Upvotes: 2

Views: 5076

Answers (1)

carlosfigueira
carlosfigueira

Reputation: 87323

As the error said - you need a WebContentTypeMapper to "tell" WCF to read the incoming XML messages as raw messages. You'd set the mapper in your binding. For example, the code below shows how you could define such a binding.

public class MyMapper : WebContentTypeMapper
{
    public override WebContentFormat GetMessageFormatForContentType(string contentType)
    {
        return WebContentFormat.Raw; // always
    }
}
static Binding GetBinding()
{
    CustomBinding result = new CustomBinding(new WebHttpBinding());
    WebMessageEncodingBindingElement webMEBE = result.Elements.Find<WebMessageEncodingBindingElement>();
    webMEBE.ContentTypeMapper = new MyMapper();
    return result;
}

The post at http://blogs.msdn.com/b/carlosfigueira/archive/2008/04/17/wcf-raw-programming-model-receiving-arbitrary-data.aspx has more information about using content type mappers.

Upvotes: 4

Related Questions