public void SendReceiveXmlMessage()
{
using(IConnection connection = CreateConnection(GetTestClientId()))
{
connection.Start();
using(ISession session = connection.CreateSession(AcknowledgementMode.AutoAcknowledge))
{
IDestination destination = SessionUtil.GetDestination(session, DESTINATION_NAME);
using(IMessageConsumer consumer = session.CreateConsumer(destination))
using(IMessageProducer producer = session.CreateProducer(destination))
{
NMSTestXmlType1 srcIntObject = new NMSTestXmlType1();
srcIntObject.crcCheck = 0xbadf00d;
srcIntObject.checkType = CheckType.command;
producer.Send(NMSConvert.ToXmlMessage(session, srcIntObject));
NMSTestXmlType2 srcStringObject = new NMSTestXmlType2();
srcStringObject.stringCheck = "BadFood";
producer.Send(NMSConvert.ToXmlMessage(session, srcStringObject));
// Demonstrate the ability to generically handle multiple object types
// sent to the same consumer. If only one object type is ever sent to
// the destination, then a simple inline cast is all that is necessary
// when calling the NMSConvert.FromXmlMessage() function.
for(int index = 0; index < 2; index++)
{
object receivedObject = NMSConvert.FromXmlMessage(consumer.Receive(receiveTimeout));
Assert.IsNotNull(receivedObject, "Failed to retrieve XML message object.");
if(receivedObject is NMSTestXmlType1)
{
NMSTestXmlType1 destObject = (NMSTestXmlType1) receivedObject;
Assert.AreEqual(srcIntObject.crcCheck, destObject.crcCheck, "CRC integer mis-match.");
Assert.AreEqual(srcIntObject.checkType, destObject.checkType, "Check type mis-match.");
}
else if(receivedObject is NMSTestXmlType2)
{
NMSTestXmlType2 destObject = (NMSTestXmlType2) receivedObject;
Assert.AreEqual(srcStringObject.stringCheck, destObject.stringCheck, "CRC string mis-match.");
}
else
{
Assert.Fail("Invalid object type.");
}
}
}
}
}
}