PROPID_M_SOAP_ENVELOPE

 

Applies To: Windows 10, Windows 7, Windows 8, Windows 8.1, Windows Server 2008, Windows Server 2008 R2, Windows Server 2012, Windows Server 2012 R2, Windows Server Technical Preview, Windows Vista

(Read-only, introduced in MSMQ 3.0.) The PROPID_M_SOAP_ENVELOPE property provides the SOAP envelope (not including binary attachments) of an SRMP message.

Property ID

PROPID_M_SOAP_ENVELOPE

Type Indicator

VT_LPWSTR

MQPROPVARIANT Field

pwszVal

Property Value

A string of Unicode characters containing the SOAP envelope from the message.

Remarks

The PROPID_M_SOAP_ENVELOPE property is a read-only property that is only used when reading SRMP messages. When an SRMP message is sent, the sending queue manager attaches the SOAP envelope, along with any SOAP attachments, to the message. The SOAP envelope consists of a body and a header.

To retrieve the SOAP envelope of an SRMP message, specify PROPID_M_SOAP_ENVELOPE_LENand PROPID_M_SOAP_ENVELOPE in the MQMSGPROPS structure. Then, call MQReceiveMessage or MQReceiveMessageByLookupId and examine the returned value.

If MQReceiveMessage or MQReceiveMessageByLookupId fails, returning an MQ_ERROR_BUFFER_OVERFLOW error, use the returned value of PROPID_M_SOAP_ENVELOPE_LEN to reallocate the SOAP envelope buffer and call the applicable function again.

After the receiving application retrieves this property, it can parse it to obtain specific SOAP body and header elements.

To retrieve the entire contents of an SRMP message in the form of an array of bytes, including both the SOAP envelope and the SOAP attachments associated with it, use the PROPID_M_COMPOUND_MESSAGE property.

Equivalent COM Property

With COM components, the equivalent property is MSMQMessage.SoapEnvelope.

Example Code

The following code fragment shows how PROPID_M_SOAP_ENVELOPE is specified in arrays that can be used to initialize an MQMSGPROPS structure for retrieving the SOAP envelope (note that the length of the SOAP envelope must be retrieved with the SOAP envelope).

ULONG ulSOAPEnvelopeBufferLength = 1024;  
WCHAR * wszSOAPEnvelopeBuffer = NULL;  
wszSOAPEnvelopeBuffer = (WCHAR*)malloc(ulSOAPEnvelopeBufferLength*sizeof(WCHAR));  
if (wszSOAPEnvelopeBuffer == NULL)  
{  
  return MQ_ERROR_INSUFFICIENT_RESOURCES;  
}  
memset(wszSOAPEnvelopeBuffer, 0, ulSOAPEnvelopeBufferLength*sizeof(WCHAR));  
aMsgPropID[i] = PROPID_M_SOAP_ENVELOPE_LEN;      // Property ID  
aMsgPropVar[i].vt = VT_UI4;                      // Type indicator  
aMsgPropVar[i].ulVal = ulSOAPEnvelopeBufferLength;  
i++;  
  
aMsgPropID[i] = PROPID_M_SOAP_ENVELOPE;          // Property ID  
aMsgPropVar[i].vt = VT_LPWSTR;                   // Type indicator  
aMsgPropVar[i].pwszVal = wszSOAPEnvelopeBuffer;  // Application-defined buffer  
i++;  
  
// Reallocate memory for the SOAP envelope buffer if necessary.  
wszSOAPEnvelopeBuffer = (WCHAR*)realloc(wszSOAPEnvelopeBuffer, aMsgPropVar[1].ulVal*sizeof(WCHAR));  
if (wszSOAPEnvelopeBuffer == NULL)  
{  
  return MQ_ERROR_INSUFFICIENT_RESOURCES;  
}  
memset(wszSOAPEnvelopeBuffer, 0, aMsgPropVar[1].ulVal*sizeof(WCHAR));  
aMsgPropVar[0].pwszVal = wszSOAPEnvelopeBuffer;  // Pointer to the new buffer  

See Also

Message Properties
MQMSGPROPS
MSMQMessage.SoapEnvelope
PROPID_M_COMPOUND_MESSAGE
PROPID_M_SOAP_ENVELOPE_LEN