3.2.4.4.1 Receive a Message Without a Transaction

  • The client MUST call the R_StartReceive (Opnum 7) (section 3.1.4.7) method and MUST specify the following parameter values:

    • phContext set to a QUEUE_CONTEXT_HANDLE_NOSERIALIZE (section 2.2.4.1) RPC context handle that has been returned by the server in the pphQueue output parameter of a prior call to the R_OpenQueue (Opnum 2) (section 3.1.4.2) method and that MUST NOT have been previously closed through a call to the R_CloseQueue (Opnum 3) (section 3.1.4.3) method. This value MUST NOT be NULL.

    • hCursor set to NULL.

    • ulAction set to the value specified by the message queuing application.

    • LookupId set to the value specified by the message queuing application.

    • ulTimeout set to the time-out value specified by the message queuing application.

    • dwMaxBodySize set to the value specified by the message queuing application.

    • dwRequestId set to a value that uniquely identifies this call from all other pending calls to this protocol.

  • Let readAck be a DWORD value initialized to RR_ACK (0x00000002).

  • The client MUST reconstruct the message from the SectionBuffers (section 2.2.6) structure received in the ppPacketSections parameter, as specified in section 3.1.4.7. If the message cannot be reconstructed, the client MUST set readAck to RR_NACK (0x00000001).

  • If the R_StartReceive method was invoked with a Receive action type, as specified in the ulAction parameter, then the client MUST advise the server that the message has been received by the client by calling the R_EndReceive (Opnum 9) (section 3.1.4.9) method with the following parameter values.

    • phContext as in the call to the R_StartReceive method.

    • dwAck := readAck

    • dwRequestId set to the same value as in the call to the R_StartReceive method.

  • If MQ_OK (0x00000000) is returned

    • The client MUST return the reconstructed message to the message queuing application.

  • Else if the return value is not MQ_OK

    • The client MAY<34> return MQ_OK to the message queuing application.