DTC Transactions from BizTalk 2004
DTC Transactions from BizTalk - this is a hot topic. Nobody blogging on this seems to have run a quick test on this yet?
Anyway, a colleague did the other day - it turns out that if you use a serviced component set to "supports" or "requires transactions" in an atomic scope with a send shape, the work the component does is enlisted in the DTC transaction that inserts the message into the message box.
Correspondingly, if its set to "requires new", its not enlisted in that transaction.
What does this mean? Well for a start, when you send the message, although control will pass to the next shape in the scope as if the message has been sent, the message won't have been sent. Remember that a send shape doesn't really put the message on whatever transport you're targeting through your port, it just puts it in the message box and marks it for the port specified in the orchestration and its bindings. Later on, the subscriber (the send pipeline), picks up the message and forwards it on. You can see this in those "transport ID" tags in BTSSubscriptionViewer.exe. So if you do this put inside a running DTC transaction, the message will have been written but not committed to the message box (which is, of course, simply a SQL Server database). Only when the scope shape is finished can the message be committed to the database. This is the point at which the message is picked up by the send pipeline, and handed to the adapter specified by your physical port, which puts it on the target transport.
So don't try listening for a reply in an atomic scope shape.
Anyway, a colleague did the other day - it turns out that if you use a serviced component set to "supports" or "requires transactions" in an atomic scope with a send shape, the work the component does is enlisted in the DTC transaction that inserts the message into the message box.
Correspondingly, if its set to "requires new", its not enlisted in that transaction.
What does this mean? Well for a start, when you send the message, although control will pass to the next shape in the scope as if the message has been sent, the message won't have been sent. Remember that a send shape doesn't really put the message on whatever transport you're targeting through your port, it just puts it in the message box and marks it for the port specified in the orchestration and its bindings. Later on, the subscriber (the send pipeline), picks up the message and forwards it on. You can see this in those "transport ID" tags in BTSSubscriptionViewer.exe. So if you do this put inside a running DTC transaction, the message will have been written but not committed to the message box (which is, of course, simply a SQL Server database). Only when the scope shape is finished can the message be committed to the database. This is the point at which the message is picked up by the send pipeline, and handed to the adapter specified by your physical port, which puts it on the target transport.
So don't try listening for a reply in an atomic scope shape.
27 Comments:
Hi neighbor just a note to say I saw your blog and found it interesting. So if you have the time check mine out and say Hi neighbor. Also would like to exchange some links.
Thanks
By Anonymous, at 3:00 pm
VM4JKo The best blog you have!
By Anonymous, at 10:46 am
z0Sq5B Magnific!
By Anonymous, at 5:40 pm
Thanks to author.
By Anonymous, at 6:30 pm
Thanks to author.
By Anonymous, at 7:13 pm
Hello all!
By Anonymous, at 8:19 pm
Nice Article.
By Anonymous, at 9:20 pm
Please write anything else!
By Anonymous, at 10:52 am
Thanks to author.
By Anonymous, at 3:30 pm
Thanks to author.
By Anonymous, at 4:31 pm
Nice Article.
By Anonymous, at 5:31 pm
Hello all!
By Anonymous, at 6:17 pm
JIWSzk write more, thanks.
By Anonymous, at 7:29 pm
actually, that's brilliant. Thank you. I'm going to pass that on to a couple of people.
By Anonymous, at 4:02 am
Thanks to author.
By Anonymous, at 4:36 am
Please write anything else!
By Anonymous, at 6:26 am
Magnific!
By Anonymous, at 7:01 am
Wonderful blog.
By Anonymous, at 7:34 am
Hello all!
By Anonymous, at 8:01 am
actually, that's brilliant. Thank you. I'm going to pass that on to a couple of people.
By Anonymous, at 9:04 am
Please write anything else!
By Anonymous, at 9:43 am
Nice Article.
By Anonymous, at 10:28 am
Magnific!
By Anonymous, at 11:33 am
Lottery: A tax on people who are bad at math.
By Anonymous, at 12:05 pm
The gene pool could use a little chlorine.
By Anonymous, at 12:42 pm
640K ought to be enough for anybody. - Bill Gates 81
By Anonymous, at 1:19 pm
Give me ambiguity or give me something else.
By Anonymous, at 1:47 pm
Post a Comment
<< Home