Friday, February 15, 2008

BizTalk HTTP Chunked Encoding issues

You are probably reading this snippet because you have a perfectly working Biztalk App that works and performs in development and unit test but fails during volume tests with a downstream LOB app like say Peoplesoft with which you are trying to post via HTTP.

As you may have realized already this due to a chunked encoding issue with BizTalk . BizTalk uses chunked encoding when a message is larger than 48 KB by default.


Well when the message payload size is large HTTP/1.1 RFC implementation allows you to specify to the listener that I am going to send you my message in a series of packets each with it's own size indicator with an Optional trailer containing entity header fields
This is to allow the recipient to verify that it has received the whole message.

To do this the sender must set the in the HTTP Header a property called
transfer-coding = "chunked"

It can then send data in chunks and the recipient if HTTP 1.1 compliant will start collecting data until it gets a chunk with chunk-size set to zero indicating end of transmission.

Great , How does it affect me

BizTalk HTTP Adapter does not set this header when sending chunked data causing downstream listeners to assume this is a whole transmission for a partial data packet. Now you know why your app works in your development box where one tends to test with smaller test files not in server at load :-)

What do I do to resolve this

Since you don't have a way of setting this HTTP Header , the other option is to disable chunking altogether in 2004 with a QFE

BizTalk 2004 SP1 and BizTalk 2006 already has the QFE so in this case all you need to do is to set the registry key DWORD DisableChunkEncoding to 1
as specified here

If you want to learn more about chunked encoding read the HTTP RFC section 3.6.1 here

If you had a scenario this post helped leave me a note

3 comments:

Anonymous said...

Brilliant, saved my weekend

Anonymous said...

I have encountered the same issue last summer. I have wasted a lot of time.

Anonymous said...

I have encountered this issue last summer and I have wasted a lot of time before finding this solution