1

NServiceBus 菜鸟在这里。我创建了一个简单的 Winforms 应用程序,它向我的本地队列发送消息。它在本地工作。当我在本地运行它时,我可以在我的队列中看到测试消息。没有抛出异常。

但是,当我在不同 AD 域的机器上运行相同的示例应用程序时,它会引发以下异常。

在此处输入图像描述

这是代码。

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("girish@my-pc-name.domain.net", 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; }
}

我什至决定传递一个字符串数组作为消息,它说“System.String 没有在序列化程序中注册......”

所以我知道问题不是 TestMessage 类型。

知道我做错了什么吗?

4

2 回答 2

1

这是一个防火墙问题。1801 端口被封锁。我必须与基础设施和网络支持团队合作才能解决这个问题。

谢谢你的帮助。

于 2013-03-14T05:03:57.630 回答
0

您看到的错误表明 NServiceBus 找不到合适的程序集。您的消息所在的程序集。不知道您在用字符串做什么,因为您使用的是 IMessage。您使用的是 NServiceBus 2.x 吗?

除此之外,最好在配置中指定要发送到的队列,而不是在代码中。从文档

<UnicastBusConfig>
  <MessageEndpointMappings>
    <add Messages="MessageDLL" Endpoint="DestinationQueue@TargetMachine"/>
  </MessageEndpointMappings>
</UnicastBusConfig>

我不知道你到底在做什么,但你不是从一个 AD 域发送到另一个域吗?域之间是否存在信任,因此您可以将消息从域 A 上的 MSMQ 发送到域 B 上的 MSMQ?

于 2013-03-13T20:31:40.660 回答