CodeSharp.EventSourcing.MsmqUtilities.Convert C# (CSharp) Метод

Convert() публичный статический Метод

Converts an MSMQ message to a Message.
public static Convert ( System m ) : Message
m System
Результат Message
        public static Message Convert(System.Messaging.Message m)
        {
            var result = new Message
            {
                Id = m.Id,
                CorrelationId = m.CorrelationId == "00000000-0000-0000-0000-000000000000\\0" ? null : m.CorrelationId,
                Recoverable = m.Recoverable,
                TimeToBeReceived = m.TimeToBeReceived,
                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;
        }

Same methods

MsmqUtilities::Convert ( Message message ) : System.Messaging.Message

Usage Example

        void IMessageTransport.SendMessage(Message message, Address targetAddress)
        {
            if (message == null)
            {
                throw new ArgumentNullException("message");
            }
            if (targetAddress == null)
            {
                throw new ArgumentNullException("targetAddress");
            }

            var queuePath = MsmqUtilities.GetFullPath(targetAddress);

            try
            {
                using (var messageQueue = new MessageQueue(queuePath, QueueAccessMode.SendAndReceive))
                {
                    var toSend = MsmqUtilities.Convert(message);

                    if (message.ReplyToAddress != null)
                    {
                        toSend.ResponseQueue = new MessageQueue(MsmqUtilities.GetReturnAddress(message.ReplyToAddress.ToString(), targetAddress.ToString()));
                    }

                    messageQueue.Send(toSend, MessageQueueTransactionType.Automatic);

                    message.Id = toSend.Id;
                }
            }
            catch (MessageQueueException ex)
            {
                if (ex.MessageQueueErrorCode == MessageQueueErrorCode.QueueNotFound)
                {
                    throw new EventSourcingException("消息队列未找到: [{0}]", targetAddress);
                }
                else
                {
                    throw new EventSourcingException("发送消息到队列时遇到异常,队列地址:{0},异常详情:{1}", targetAddress, ex);
                }
            }
            catch (Exception ex)
            {
                throw new EventSourcingException("发送消息到队列时遇到异常,队列地址:{0},异常详情:{1}", targetAddress, ex);
            }
        }
All Usage Examples Of CodeSharp.EventSourcing.MsmqUtilities::Convert