//private static DateTime baseDate = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); public static string GetRealMessageId(IBM.XMS.IMessage message) { var id = message.GetStringProperty(HEADER_ORIGINALID); return string.IsNullOrEmpty(id) ? message.JMSMessageID : id; }
// TODO: test this public static void PopulateErrorQueueMessage(IBytesMessage toSend, IBM.XMS.IBytesMessage failed, XmsDestination xmsDestination) { var body = new byte[failed.BodyLength]; if (body.Length > 0) { failed.ReadBytes(body, body.Length); toSend.WriteBytes(body); } toSend.JMSCorrelationID = failed.JMSCorrelationID; toSend.JMSDeliveryMode = failed.JMSDeliveryMode; toSend.CopyStringProperty(HEADER_RETURNADDRESS, failed); toSend.CopyStringProperty(HEADER_IDFORCORRELATION, failed); toSend.CopyStringProperty(HEADER_WINDOWSIDENTITYNAME, failed); toSend.CopyStringProperty(HEADER_MESSAGEINTENT, failed); var keys = failed.GetStringProperty(HEADER_NBSKEYS); var unwrapedKeys = UnwrapKeys(keys); foreach (var unwrapedKey in unwrapedKeys) { toSend.CopyStringProperty(unwrapedKey, failed); } toSend.CopyStringProperty(HEADER_NBSKEYS, failed); // error queue specific toSend.SetStringProperty(HEADER_FAILEDQUEUE, xmsDestination.ToString()); var id = failed.GetStringProperty(HEADER_ORIGINALID); toSend.SetStringProperty(HEADER_ORIGINALID, id); }
public static TransportMessage Convert(IBM.XMS.IMessage m) { var result = new TransportMessage(); result.Id = GetRealMessageId(m); result.CorrelationId = m.JMSCorrelationID; result.Recoverable = m.JMSDeliveryMode == DeliveryMode.Persistent; result.IdForCorrelation = m.GetStringProperty(HEADER_IDFORCORRELATION); result.ReplyToAddress = m.GetStringProperty(HEADER_RETURNADDRESS).ToXmsAddress().ToNsbAddress(); //result.WindowsIdentityName = m.GetStringProperty(HEADER_WINDOWSIDENTITYNAME); result.MessageIntent = (MessageIntentEnum)m.GetIntProperty(HEADER_MESSAGEINTENT); //result.TimeSent = baseDate.AddMilliseconds(m.JMSTimestamp); result.Headers = new Dictionary<string, string>(); //TODO: //result.TimeToBeReceived = DateTime.UtcNow - baseDate.AddMilliseconds(m.JMSExpiration); if (m.GetStringProperty("NSBKeys") != null) { var keys = UnwrapKeys(m.GetStringProperty("NSBKeys")); result.Headers = (from k in keys select new {Key = k.FromXmsFriendly(), Value = m.GetStringProperty(k)}) .ToDictionary(x=>x.Key,x=>x.Value); } //TODO: //TimeToBeReceived = baseDate.AddMilliseconds(m.JMSTimestamp), //ReplyToAddress = GetIndependentAddressForQueue(m.ResponseQueue), var byteMessage = m as IBytesMessage; if (byteMessage == null) { return null; } if (byteMessage.BodyLength > 0) { var body = new byte[byteMessage.BodyLength]; byteMessage.ReadBytes(body); result.Body = body; } return result; /* TransportMessage transportMessage = new TransportMessage() { Id = m.Id, CorrelationId = m.CorrelationId == "00000000-0000-0000-0000-000000000000\\0" ? (string)null : m.CorrelationId, Recoverable = m.Recoverable, TimeToBeReceived = m.TimeToBeReceived, TimeSent = m.SentTime, ReplyToAddress = MsmqUtilities.GetIndependentAddressForQueue(m.ResponseQueue), MessageIntent = Enum.IsDefined(typeof(MessageIntentEnum), (object)m.AppSpecific) ? (MessageIntentEnum)m.AppSpecific : MessageIntentEnum.Send }; m.BodyStream.Position = 0L; transportMessage.Body = new byte[m.BodyStream.Length]; m.BodyStream.Read(transportMessage.Body, 0, transportMessage.Body.Length); transportMessage.Headers = new Dictionary<string, string>(); if (m.Extension.Length > 0) { MemoryStream memoryStream = new MemoryStream(m.Extension); foreach (HeaderInfo headerInfo in MsmqUtilities.headerSerializer.Deserialize((Stream)memoryStream) as List<HeaderInfo>) { if (headerInfo.Key != null) transportMessage.Headers.Add(headerInfo.Key, headerInfo.Value); } } transportMessage.Id = TransportHeaderKeys.GetOriginalId(transportMessage); if (transportMessage.Headers.ContainsKey("EnclosedMessageTypes")) MsmqUtilities.ExtractMsmqMessageLabelInformationForBackwardCompatibility(m, transportMessage); transportMessage.IdForCorrelation = TransportHeaderKeys.GetIdForCorrelation(transportMessage); return transportMessage;*/ }
public static TransportMessage Convert(IBM.XMS.IMessage m) { var result = new TransportMessage(); result.Id = GetRealMessageId(m); result.CorrelationId = m.JMSCorrelationID; result.Recoverable = m.JMSDeliveryMode == DeliveryMode.Persistent; result.IdForCorrelation = m.GetStringProperty(HEADER_IDFORCORRELATION); result.ReturnAddress = m.GetStringProperty(HEADER_RETURNADDRESS); result.WindowsIdentityName = m.GetStringProperty(HEADER_WINDOWSIDENTITYNAME); result.MessageIntent = (MessageIntentEnum) m.GetIntProperty(HEADER_MESSAGEINTENT); result.TimeSent = baseDate.AddMilliseconds(m.JMSTimestamp); result.Headers = new List<HeaderInfo>(); //TODO: //result.TimeToBeReceived = DateTime.UtcNow - baseDate.AddMilliseconds(m.JMSExpiration); if (m.GetStringProperty("NSBKeys") != null) { var keys = UnwrapKeys(m.GetStringProperty("NSBKeys")); result.Headers = (from k in keys select new HeaderInfo { Key = k.FromXmsFriendly(), Value = m.GetStringProperty(k) }).ToList(); } //TODO: //TimeToBeReceived = baseDate.AddMilliseconds(m.JMSTimestamp), //ReplyToAddress = GetIndependentAddressForQueue(m.ResponseQueue), return result; }