سؤال

Given this event

 public class DummyEvent : EventDTO{
    public CustomUUID Cid { get; set; }
    public DateTime Date { get; set; }
    public Guid Id { get; set; }
}

I'm sending messages via MSMQ:

 var de = new DummyEvent {
                               Date = DateTime.UtcNow, 
                               Id = Guid.NewGuid(), 
                               Cid = Guid.NewGuid()
                           };
 var mq = new MessageQueue(AppSettings.EventQueue);                            
 mq.Formatter = new XmlMessageFormatter(new[]{de.GetType()});
 mq.Send(de);
 var e = reciever.Receive().Body;

Date is System.DateTime so it gets deserialized ok.
Id is System.Guid so it gets deserialized ok.
Cid is CustomUUID which is a user defined type that doesnt get deserialized.

I need to send customer-defined types as well, but there is scarce info on the net.

EDIT: It actually doesn't get serialized, so the problem is at Sending the message

هل كانت مفيدة؟

المحلول

Here is the sample

using System;
using System.Messaging;

namespace MsmqSample
{
    internal class Program
    {
        private static MessageQueue _queue;
        private static readonly BinaryMessageFormatter _formatter = new BinaryMessageFormatter();

        private static void Main(string[] args)
        {
            const string queueName = @".\private$\TaskQueue";
            if (!MessageQueue.Exists(queueName))
            {
                MessageQueue.Create(queueName, true);
            }
            _queue = new MessageQueue(queueName);
            _queue.Purge();
            AddMessage();
            Console.ReadKey();
        }

        private static void AddMessage()
        {
            using (var transaction = new MessageQueueTransaction())
            {
                try
                {
                    transaction.Begin();
                    var externalMessage = new ExternalMessage {Data = "Test Data"};
                    _queue.Send(new Message(externalMessage, _formatter), transaction);
                    transaction.Commit();
                }
                catch (Exception)
                {
                    transaction.Abort();
                }
            }
        }
    }

    [Serializable]
    public class ExternalMessage
    {
        public string Data;

        public ExternalMessage()
        {
            Content = new MessageContent {Guid = Guid.NewGuid()};
        }

        public MessageContent Content { get; set; }
    }

    [Serializable]
    public class MessageContent
    {
        public Guid Guid { get; set; }
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top