Hi all
2 and a half year ago, I wrote a blog post about looping around elements, which can
be found here: http://blog.eliasen.dk/2006/11/05/LoopingAroundElementsOfAMessage.aspx.
In this post, I mention two ways to do something per element in a message. One is
to use the XML (or flat file) disassembler to split the message into lots of messages
and have them handled individually, and the other is to do it inside an orchestration.
Since then, BizTalk has been updated such that you can now call a receive pipeline
from within your orchestration, which gives you the another way of looping through
elements inside an orchestration.
Often times, in the forums, users are suggested to loop through elements of a message
inside an orchestration. It is a fairly common approach if you want the subelements
of a message handled in the correct order, for instance.
This post is to make sure people know that looping around a message inside an orchestration
can have a serious performance impact.
Say you receive a large message – 100MB. You start looping around it inside an orchestration
and split it up into, say, 1000 messages of 100k each. Then, for each message you
call a web service or send out the message to some system. What will happen is, that
the orchestration will persist its state after each send shape, meaning that the 100BM
is written 1000 times to the messagebox. Persistence points are something you always
need to be aware of when designing your orchestrations, and with messages of 100MB,
even more so.
SO, don’t just loop around a message inside an orchestration because you can do it
when you absolutely have to.
Thanks
—
eliasen