A recent question in Stephen
W. Thomas‘ excellent BizTalkGurus
forums asked about how to control the value the HTTP send-side adapter in BizTalk
Server 2006 sends on HTTP requests. After a little investigation through the adapter
code (which lives in the Microsoft.Biztalk.HttpTransport.dll assembly), here’s my
guess of what goes on:
When the adapter is going to send the message, it gets the value for the Content-Type
header from one of theses two locations:
-
If the body part of the message has the ContentType property set (IBaseMessagePart.ContentType),
then it is considered -
If the send port configuration has the Content Type property set, then this value
overrides the previous value.
However, that’s not all that is considered. As it turns out, the adapter explicitly
considers text content types (i.e. “text/*” MIME types). If the content type
is a text type, then the adapter will append the encoding of the message to the content
type, like this:
Content-Type: text/xml; charset=utf-8
If the content type is not a text type, then it leaves it alone.
If you don’t want the charset to be appended to the Content-Type header for any reason,
it appears there might be a way around it: The value for the charset is extracted
from the Charset
property of the body part of the message, but the Content-Type header is
only modified if this property contains a non-null, non-empty value.
It would appear possible to work around this then by simply ensuring the Charset property
is empty by the time the adapter gets hold of the message; using a custom pipeline
component in the send pipeline would seem a good way of accomplishing this.