2013-03-12 1 views
1

여기 NServiceBus 멍청한 놈. 로컬 대기열에 메시지를 보내는 간단한 Winforms 앱을 만들었습니다. 그것은 로컬에서 작동합니다. 로컬에서 실행할 때 대기열에서 테스트 메시지를 볼 수 있습니다. 예외는 발생하지 않습니다.NServiceBus - "유형이 시리얼 라이저에 등록되지 않았습니다."

하지만 다른 AD 도메인에있는 컴퓨터에서 동일한 샘플 앱을 실행하면 다음 예외가 throw됩니다.

enter image description here

여기에 코드입니다.

public partial class Form1 : Form 
{ 
    private IBus bus; 

    public Form1() 
    { 
     InitializeComponent(); 
     bus = Configure.With() 
      .UnityBuilder() 
      .XmlSerializer() 
      .MsmqTransport() 
      .UnicastBus() 
      .ImpersonateSender(true) 
      .SendOnly(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      bus.Send("[email protected]", new TestMessage() { OrderId = "99" }); 
      label1.Text = "Message sent successfully!"; 
     } 
     catch (Exception ex) 
     { 
      label1.Text = ex.ToString(); 
      //throw; 
     } 
    } 
} 

[Serializable] 
public class TestMessage : IMessage 
{ 
    public string OrderId { get; set; } 
} 

난 메시지로 문자열 배열을 전달하기로 결정하고 그렇게

나는 그것이 년대 TestMessage 유형하지 알고 .... "선택 System.String이 시리얼에 등록되지 않았습니다"라는 문제.

내가 뭘 잘못하고 있는지 아는 사람이 있습니까?

답변

1

방화벽 문제였습니다. 포트 1801이 차단되었습니다. 인프라 & 네트워크 지원 팀과 협력하여이 문제를 해결해야했습니다.

도움 주셔서 감사합니다.

0

오류는 NServiceBus가 적절한 어셈블리를 찾을 수 없다는 사실을 나타냅니다. 메시지가 들어있는 어셈블리. IMessage를 사용하고 있기 때문에 문자열로 무엇을하고 있는지 알 수 없습니다. NServiceBus 2.x를 사용하고 있습니까?

게다가, 코드 대신 구성에서 보낼 큐를 지정하는 것이 좋습니다. documentation

<UnicastBusConfig> 
    <MessageEndpointMappings> 
    <add Messages="MessageDLL" Endpoint="[email protected]"/> 
    </MessageEndpointMappings> 
</UnicastBusConfig> 

에서 나는 정확히 무슨 일을하는지 모르겠지만, 다른 도메인에 하나 개의 AD 도메인에서 발송되지 않습니다? 도메인간에 트러스트가있어 도메인 A의 MSMQ에서 도메인 B의 MSMQ로 메시지를 보낼 수 있습니까?

+0

포트 1801이 차단되었습니다. 그것이 이유였습니다. 그러나 당신이 볼 수 있듯이, 오류 메시지는 오해의 소지가 조금 나를 위해 던져 버렸습니다. 당신의 도움을 주셔서 감사합니다. – Girish

관련 문제