Reputation: 967
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
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