3.1.7.2.5 Sending the Message

The protocol MUST send the message on the transport (see section 3.1.7.7 for more details). If the transport is HTTP or HTTPS, the protocol MUST wait for the HTTP response or time-out from the transport:

  • If the response is "HTTP 200 OK" the message was received, saved to disk if it is durable, and placed in the destination queue. The responsibility for the message has been transferred to the receiving QM. The sending QM MUST delete the message from the OutgoingQueue ADM element if the message is a regular or durable message; however, if the message is a stream message (that is, SRMPMessage.TransactionSequenceNumber has a value not equal to zero) the sending QM MUST retain the message in the OutgoingQueue. A non-stream message that is deleted from the OutgoingQueue with the <Journal/> element present in the <Msmq> element MUST be journaled as specified in section 3.1.5.2.2. The Session Cleanup Timer (section 3.1.2.4) MUST be canceled, if running, and then started.

  • If the response is "HTTP 400 Bad Request", the message was received but rejected by the receiving QM because of malformed SRMP syntax. No further processing of the message is possible; the sending QM MUST delete the message from the OutgoingQueue. A message that is deleted from the OutgoingQueue with the <Deadletter/> element present in the <Msmq> element MUST be deadlettered as specified in section 3.1.5.2.1. The Session Cleanup Timer MUST be canceled, if running, and then started.

  • If the response is "HTTP 5xx Internal Server Error" or if the transport times out with no response, the receiving QM did not receive the message.  The protocol MUST perform the following steps: