/// <summary> /// Converts an MSMQ message to a TransportMessage. /// </summary> /// <param name="m"></param> /// <returns></returns> public static TransportMessage Convert(Message m) { var result = new TransportMessage { Id = m.Id, CorrelationId = (m.CorrelationId == "00000000-0000-0000-0000-000000000000\\0" ? null : m.CorrelationId), Recoverable = m.Recoverable, TimeToBeReceived = m.TimeToBeReceived, TimeSent = m.SentTime, ReplyToAddress = GetIndependentAddressForQueue(m.ResponseQueue), MessageIntent = Enum.IsDefined(typeof(MessageIntentEnum), m.AppSpecific) ? (MessageIntentEnum)m.AppSpecific : MessageIntentEnum.Send }; m.BodyStream.Position = 0; result.Body = new byte[m.BodyStream.Length]; m.BodyStream.Read(result.Body, 0, result.Body.Length); result.Headers = new Dictionary <string, string>(); if (m.Extension.Length > 0) { var stream = new MemoryStream(m.Extension); var o = headerSerializer.Deserialize(stream); foreach (var pair in o as List <HeaderInfo> ) { if (pair.Key != null) { result.Headers.Add(pair.Key, pair.Value); } } } result.Id = result.GetOriginalId(); if (result.Headers.ContainsKey("EnclosedMessageTypes")) // This is a V2.6 message { ExtractMsmqMessageLabelInformationForBackwardCompatibility(m, result); } result.IdForCorrelation = result.GetIdForCorrelation(); return(result); }