0

このイベントを考えると

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

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;

日付はSystem.DateTimeであるため、逆シリアル化されます
IdはSystem.Guidであるため、逆シリアル化されます
CidはCustomUUIDであり、逆シリアル化されないユーザー定義タイプです。

顧客定義のタイプも送信する必要がありますが、ネット上にはほとんど情報がありません。

編集:実際にはシリアル化されないため、問題はメッセージの送信にあります

4

1 に答える 1

2

これがサンプルです

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; }
    }
}
于 2012-07-30T18:35:36.430 に答える