public void Persist(AuditMessage message)
 {
     using (var session = DocumentStore.OpenSession())
     {
         string id = message.MessageId;
         session.Store(message);
         session.SaveChanges();
     }
 }
Esempio n. 2
0
        void AuditMessageQueueTransport_TransportMessageReceived(object sender, TransportMessageReceivedEventArgs e)
        {
            var message = e.Message;

            var messageBodyXml = System.Text.Encoding.UTF8.GetString(message.Body);
            RavenJObject jsonBody;

            if (messageBodyXml.StartsWith("["))
            {
                jsonBody = (RavenJObject) RavenJArray.Load(new JsonTextReader(new StreamReader(new MemoryStream(message.Body)))).Values().First();
            }
            else
            {
                var doc = new XmlDocument();
                doc.Load(new MemoryStream(message.Body));
                var firstMessageNode = doc.DocumentElement.ChildNodes.Cast<XmlNode>().First();
                var convertedJson = JsonConvert.SerializeXmlNode(firstMessageNode, Formatting.Indented, true);
                jsonBody = convertedJson != "null" ? RavenJObject.Parse(convertedJson) : null;
            }

            // Get the header list as a key value dictionary...
            Dictionary<string, string> headerDictionary = message.Headers.ToDictionary(k => k.Key, v => v.Value);

            var enclosedMessageType = headerDictionary["NServiceBus.EnclosedMessageTypes"];
            string messageType = enclosedMessageType;
            if (!String.IsNullOrWhiteSpace(enclosedMessageType))
            {
                messageType = enclosedMessageType.Split(new char[] { ',' }, StringSplitOptions.None)[0];
            }

            AuditMessage messageToStore = new AuditMessage
            {
                MessageId = message.Id,
                OriginalMessageId = message.GetOriginalId(),
                OriginalBody = messageBodyXml,
                Body = jsonBody,
                Headers = headerDictionary,
                ReplyToAddress = message.ReplyToAddress.ToString(),
                MessageType = messageType,
                ReceivedTime = DateTime.ParseExact(headerDictionary["NServiceBus.TimeSent"], "yyyy-MM-dd HH:mm:ss:ffffff Z", System.Globalization.CultureInfo.InvariantCulture)
            };

            // Save the message
            Console.WriteLine("Saving {0}", messageType);
            Persister.Persist(messageToStore);
        }