C# 无法使自身主机在NServiceBus上工作

C# 无法使自身主机在NServiceBus上工作,c#,.net,nservicebus,servicebus,C#,.net,Nservicebus,Servicebus,使用版本2.0.0.1219 我正在尝试使用NServiceBus和VS2010自托管订阅服务器和发布服务器。程序运行并初始化,但我无法获取要移动的消息。发布者的行为就像发布一样,没有错误,但订阅者什么也没有收到 这是订阅服务器配置 <?xml version="1.0"?> <configuration> <configSections> <section name="MsmqTransportConfig" type="NServiceB

使用版本2.0.0.1219

我正在尝试使用NServiceBus和VS2010自托管订阅服务器和发布服务器。程序运行并初始化,但我无法获取要移动的消息。发布者的行为就像发布一样,没有错误,但订阅者什么也没有收到

这是订阅服务器配置

<?xml version="1.0"?>
<configuration>
  <configSections>
    <section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core"/>
    <section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core"/>
  </configSections>

  <!-- in order to configure remote endpoints use the format: "queue@machine" 
       input queue must be on the same machine as the process feeding off of it.
       error queue can (and often should) be on a different machine.
  -->

  <MsmqTransportConfig InputQueue="loads" ErrorQueue="error" NumberOfWorkerThreads="1" MaxRetries="5"/>

  <UnicastBusConfig>
    <MessageEndpointMappings>
      <add Messages="NServiceMessage" Endpoint="loads"/>
    </MessageEndpointMappings>
  </UnicastBusConfig>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
以及用户代码

    class Program
{
    private static IBus _serviceBus;
    private static LoadMessageHandler _messageHandler;

    static void Main(string[] args)
    {
        _messageHandler = new LoadMessageHandler();

        _serviceBus = Configure
           .With()
           .Log4Net()
           .DefaultBuilder()
           .BinarySerializer()
           .MsmqSubscriptionStorage()
           .MsmqTransport()
           .UnicastBus()
           .LoadMessageHandlers()
           .CreateBus()
           .Start();

        Console.ReadKey();
    }
}
和消息代码

public class LoadMessageHandler : IHandleMessages<LoadMessage>
{
    public void Handle(LoadMessage message)
    {
        Console.WriteLine(String.Format("GUID: {0}", message.EventId));
    }
}
公共类LoadMessageHandler:IHandleMessages
{
公共无效句柄(LoadMessage)
{
WriteLine(String.Format(“GUID:{0}”,message.EventId));
}
}

您似乎对两个端点使用了相同的输入队列,请将您的订阅服务器移动到它自己的队列中,看看是否有效

另外,不需要为订阅服务器配置订阅存储,因为由发布服务器负责存储订阅信息

希望这有帮助

更多问题:

1:必须将msmq传输配置为事务传输,发布服务器才能接受订阅消息。有关配置这些的示例,请参见


2:Publisher正在使用XmLSerializer,而subscriber正在使用BinarySerializer,这使它们不兼容。

需要更完整的代码,包括名称空间和目标DLL,才能确定此问题的原因。NServiceMessage in是指定义LoadMessage类型的dll。谢谢,就是这样做的,这是我出错的后半部分。
    class Program
{
    private static IBus _serviceBus;
    private static LoadMessageHandler _messageHandler;

    static void Main(string[] args)
    {
        _messageHandler = new LoadMessageHandler();

        _serviceBus = Configure
           .With()
           .Log4Net()
           .DefaultBuilder()
           .BinarySerializer()
           .MsmqSubscriptionStorage()
           .MsmqTransport()
           .UnicastBus()
           .LoadMessageHandlers()
           .CreateBus()
           .Start();

        Console.ReadKey();
    }
}
public class LoadMessageHandler : IHandleMessages<LoadMessage>
{
    public void Handle(LoadMessage message)
    {
        Console.WriteLine(String.Format("GUID: {0}", message.EventId));
    }
}