2014-10-21 4 views
2

다른 컴퓨터의 버스로 메시지를 전송하는 .NET 콘솔 응용 프로그램이 있습니다. 코드를 사용하여 :NServiceBus XML 메시지를 어떻게 deserialize 할 수 있습니까?

Bus.Send(MyMessageClass); 

내가 지금 원하는 것은 XML을 다시 C#을 객체 MyMessageClass에 메시지를 역 직렬화 할 수 있습니다. 이것은 내가 메시지에 설정되어 전송 된 속성에 대한 수용 테스트를 작성할 수 있도록하기 위해서입니다. System.Messaging.Message() 개체에 메시지를 가져온 다음이 인스턴스의 BodyStream에서 XML 문서를 가져올 수는 있지만 올바르게 역 직렬화 할 수는 없습니다.

가능한 경우 NServiceBus.Serializers.XML.XmlMessageSerializer() 개체 (.NET Framework의 XmlSerializer() 개체 아님)를 사용하여이 작업을 수행하고 싶습니다.

답변

2

이전에 한 번에 메시지의 직렬화 문제를 해결해야했기 때문에이 이전 단위 테스트를 수행해야했습니다. 시작하기에 충분할 수도 있지만 IIRC는 실행중인 버스의 컨텍스트에서 실행해야합니다. 그렇지 않으면 메시지 유형이 직렬화 기와 함께 등록되지 않습니다 (버스가 부트 스트랩 될 때 발생합니다).

[Test] 
    public void TestMyMessage() 
    { 
     var test = new MyMessage(); 

     var serializer = new XmlMessageSerializer(new MessageMapper()); 

     var messages = new object[] {test}; 

     using (var stream = new MemoryStream()) 
     { 
      serializer.Serialize(messages, stream); 
      stream.Position = 0; 

      object[] msg = serializer.Deserialize(stream); 

      Assert.NotNull(msg[0]); 
      Assert.IsTrue(msg[0] is MyMessage); 
     } 
    } 

XML 직렬화 here에 대한 NSB의 단위 테스트 주위 찌를 가치가있을 수 있습니다.

+0

이것은 매우 도움이되었습니다. GitHub에서 테스트 한 결과를 찾았으므로 이제 테스트가 작동합니다. – JDTLH9

관련 문제