About the hotfix
Message flow after the hotfix is installed and configured
After you apply and enable this hotfix, the MLLP adapter submits any message that is received by the MLLP adapter to MessageBoxDB. The End Point Manager (EPM) calls back the adapter together with the submission status in the
BatchComplete method. This causes the adapter to send the commit ACK/NAK to the upstream system. In turn, the upstream system receives the ACK/NAK and then sends the next message. The
BatchComplete method is independent of the
MaxReceiveInterval setting and is called immediately after the message is submitted to BizTalk successfully.
As soon as the message is ready to send, the send adapter transmits the message to the downstream system. The ACK/NAK is expected if the
Use MLLP Transport Acknowledgement property is set to
True. If the send is an ACK, BizTalk finishes the processing successfully. If the send is a NAK, and if the
Suspend Request Message on MLLP Transport NAK property is set to
True, the message is suspended directly without retrying. However, if the
Suspend Request Message on MLLP Transport NAK property is set to
False, BizTalk will retry based on the send port retry interval settings. (By default, the
Suspend Request Message on MLLP Transport NAK property is set to
False.)
The following diagram shows the message flow:
- The message that is sent by the upstream system sending application is processed by the MLLP receive adapter.
- The MLLP adapter submits the message to BizTalk/EPM.
- The EPM calls back the adapter about the message submission status. The EPM does this in the Batch Complete method.
- A commit ACK/NAK is generated by the MLLP adapter and is based on the Batch Submission status. The ACK/NAK is sent to the sending application.
Note If the Batch Submission status is Success, the adapter returns the ACK. However, if there is a failure or if the submission times out (for example, if the Batch Complete method call times out), the adapter returns the NAK to the sending application.
- The EPM hands over the message to the MLLP send adapter for transmission.
- The MLLP send adapter sends the processed message to the downstream system.
- The transport level ACK/NAK is expected by the MLLP send adapter to complete the communication.
- If the message in step 7 is an ACK, the adapter asks the EPM to delete the message. Otherwise, the adapter has to ask the EPM for a retry that is based on the retry interval setting. A new option is provided in the send port configuration setting for suspending the message directly, without a retry, if an MLLP NAK is received. By default, this option is set to False. If this option is set to True, the message will be suspended directly, without a retry, if an MLLP NAK is received.
Transport Level ACK/NACK format
The website contains the following information:
- Example of an MLLP Commit Acknowledgement:
<SB><ACK><EB><CR>
- Example of an MLLP Negative Commit Acknowledgement:
<SB><NAK><EB><CR>
Notes- In these examples, <SB> refers to the Start Block character (1 byte). This corresponds to the <VT>ASCII character, or <0x0B>.
This should not be confused with the SOH or STX ASCII characters. - In these examples, <ACK> or <NAK> refer to the acknowledgement character (1 byte. Corresponds to the <ACK> ASCII character, or <0x06>) or the negative-acknowledgement character (1 byte. Corresponds to the <NAK> ASCII character, or <0x15>).
- In these examples, <EB> refers to the End Block character (1 byte). This corresponds to the <FS> ASCII character, or <0x1C>.
- In these examples, <CR> refers to the Carriage Return character (1 byte). This corresponds to the <CR> ASCII character, or <0x0D>.
- Microsoft provides third-party contact information to help you find technical support. This contact information may change without notice. Microsoft does not guarantee the accuracy of this third-party contact information.
How to configure the receive and send ports to use the new properties
Configure the receive and send ports as follows.
Note The receive and send port settings can be used independently or together.
Receive port configuration
- The port must be a one-way port.
- The Ordered Delivery parameter must be enabled.
- You must set the Use MLLP Transport Acknowledgement property to True to enable transport level acknowledgment. By default, this property is set to False for existing ports or for new ports.
Send port configuration
- The port must be a one-way port.
- The solicit-response mode must be set to No.
- The Ordered Delivery parameter must be enabled.
- You must set the Use MLLP Transport Acknowledgement property to True to enable transport level acknowledgment. By default, this property is set to False for existing ports or for new ports.
- You must set the Suspend Request Message on MLLP Transport NAK property to True if the messages need to be suspended directly without being retried when a Transport NAK is received from a downstream system. Otherwise, the message will be retried for the number of times that is set in the transport advanced options of the send port. By default, this property is set to False for existing ports or for new ports.
About the "Use MLLP Transport Acknowledgement" property
The following table describes the expected behavior of one-way or two-way ports that use the
Use MLLP Transport Acknowledgement property. The required combination of settings must be applied as described in the "How to enable the hotfix" section.
Notes- "Upstream system" refers to the sending application. It sends messages to BizTalk. These messages are incoming to BizTalk.
- "Downstream system" refers to the receiving application. It receives messages from BizTalk. These messages are outgoing to BizTalk.
Kind of port | MLLP V2 Option On | MLLP V2 Option Off |
---|
One-way receive | Send MLLP ACK/NAK to the upstream system in the BatchComplete method. | No change in the behavior. In this situation, no ACK/NAK is sent to the upstream system. |
Two-way receive | No change in the behavior. In this situation, the HL7 ACK/NAK in the TransmitMessage method is sent to the upstream system.
Note This option is not supported. For example, ignore even if the value is set to True. | No change in the behavior. In this situation, the HL7 ACK/NAK in the TransmitMessage method is sent to the upstream system. |
One-way send | The MLLP ACK/NAK from the downstream system is waited for after the message is transmitted. | No change in the behavior. In this situation, the ACK/NAK from the downstream system is not waited for after the message is transmitted. |
Two-way send or one-way send with solicit-response mode enabled | No change in the behavior. In this situation, the HL7 ACK/NAK from the downstream system is waited for after the message is transmitted.
Note This option is not supported. For example, ignore even if the value is set to True. | No change in the behavior. In this situation, the HL7 ACK/NAK from the downstream system is waited for after the message is transmitted. |
Two-way receive and send port behavior is not changed. One-way receive and send port behavior is also not changed unless the
Use MLLP Transport Acknowledgement property is set to true.
For more information, refer to the MLLP adapter documentation. If one-way receive and send ports have the appropriate configuration, performance improves. If the
Use MLLP Transport Acknowledgement property of a two-way port or a one-way port is set to false, the kind of ACK that is generated continues without changes. In this situation, the kind of ACK that is generated depends on the BTAHL7 Configuration Explorer settings for the application that is sending the message. The value in fields
MSH 15 and
MSH 16 of a specific message can override this setting. However, if the
Use MLLP Transport Acknowledgement property of a two-way port or a one-way port is set to false, you can set the configuration for applications that expect static ACKs only by using the BTAHL7 Configuration Explorer. Time-out behavior for the port remains unchanged..
The expected behavior in corner cases when the properties are used is as follows:
RECEIVE
- WrongMLLPFormat: the message is not submitted to BizTalk.
- WrongHL7Format: the message is submitted to BizTalk, and a MLLP ACK/NAK is transmitted that is based on the Batch Completion status.
- TransmittingSocketIssue: the MLLP ACK/NAK is not transmitted, although the message is submitted to BizTalk.
- ReceivingSocketIssue: the message is not received and therefore is not submitted, and no MLLP ACK/NAK transmission is sent.
- If a submission to BizTalk fails, a NAK is transmitted.
- If a negative status of Batch Complete is received, a NAK is transmitted.
SEND and send port property "stop sending subsequent messages on current message failure" = True- WrongMLLPFormat: the message is suspended because the MLLP ACK/NACK cannot be read. Processing will not continue until the suspended messages are cleared.
- WrongHL7Format: the message fails before it reaches the adapter. Processing will not continue until the suspended messages are cleared.
- TransmittingSocketIssue: the message is suspended. Processing will not continue until the suspended messages are cleared.
- ReceivingSocketIssue: the message is suspended. Processing will not continue until the suspended messages are cleared.
The expected behavior when the
Suspend Request Message on MLLP Transport NAK property is set to
True or to
False is as follows:
- When the Suspend Request Message on MLLP Transport NAK property is set to True and a NAK is received, the message is suspended without a retry to send it.
- When the Suspend Request Message on MLLP Transport NAK property is set to the default setting of False, a retry to send the message is started, based on the send port retry interval settings.
Changes to the MLLP SDK Utility
The MLLP SDK Utility includes the following new parameters. All other parameters remain unchanged. For more information, refer to the product documentation.
- For MLLPReceive.exe, use the new parameter to return the MLLP ACK/NAK after the message is received. For example:
MLLPReceive /p 12000 /sb 11 /eb 28 /cr 13 /MLLPTransACK
MLLPReceive /p 12000 /sb 11 /eb 28 /cr 13 /MLLPTransNAK
- For MLLPSend.exe, use the new parameter to wait for MLLP ACK/NAK. For example:
MLLPSend /sb 11 /eb 28 /cr 13 /f "C:\HL7\ls.txt" /I 127.0.0.1 /p 11000 /UseMLLPTransACK