2012-07-24 2 views
0

을 통해 고객이 정의한 유형을 보내는 방법 :이 이벤트</p> <pre><code>public class DummyEvent : EventDTO{ public CustomUUID Cid { get; set; } public DateTime Date { get; set; } public Guid Id { get; set; } } </code></pre> <p>내가 MSMQ를 통해 메시지를 보내고있다 감안할 때 MessageQueue가

날짜 System.DateTime는 그래서 확인 를 직렬화 도착한다
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; 

.
Id는 System.Guid이므로 역 직렬화가 적용됩니다. ok입니다.
시드가 를 직렬화 얻을 나던하는 사용자 정의 형식 인 CustomUUID입니다.

고객 정의 유형도 보내야하지만 그물에는 부족한 정보가 있습니다.

편집 : 문제가 메시지 여기

+0

여기에 http 살펴 보시기 바랍니다 : //blog.goyello .com/2009/09/08/why-msmq-is-excelent-for-net-developers/ – GSerjo

+0

남자는 문자열 소품 만 사용합니다. 다른 사용자 정의 유형을 포함하는 자체 정의 된 유형을 보내야합니다. Dictionary 에 직접 직렬화 할 수 있지만 포맷터는 IDictonary에서 파생되는 것을 제외하고는 아닙니다. 그래서 모든 속성을 'key = value'형식으로두고 메시지를 string []으로 보냈습니다. – zirus

답변

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; } 
    } 
} 
관련 문제

 관련 문제