Entry
How can I be sure that a message has been sent?
Apr 6th, 2005 22:26
Balaji Ramachandran, http://www.netologi.se/default.aspx?Contents=BizTalkFAQ
If your orchestration needs to know IF the message was successfully
delivered you need to set the system context property "AckRequired" on
the message before sending it, when the messaging run-time sees this
property stamped on the message context it will fire an ACK back to the
orchestration once the message is successfully sent.
However, you do not actually explicitly set the AckRequired context
property in an orchestration. The orchestration designed has a more
convinient way to do this, you simply set the Delivery Notification
property on the send port to Transmitted. You will then get an
exception if the send operation fails.
Normally when you submit a message to a send port this only means that
the message has been sent to the MesasageBox accepted the message and
informed the engine that it has ownership of that message, in the case
of FILE it means the message has been successfully dropped to disc,
nothing more. Similarly, if the transmission fails BizTalk will fire a
NACK, you can use try-catch in your schedule to determine the outcome
of the transmission. To get this behavior in Orchestration, the port
should be marked with Delivery notification required; under the covers
the property I mention below will be stamped on the message context.
For the ACK there is nothing to catch, you just won't exit the
enclosing scope until the ACK (or NACK) has been received.