C# 为什么nservicebus会忽略我的订阅消息?

C# 为什么nservicebus会忽略我的订阅消息?,c#,msmq,nservicebus,windows-server-2008-r2,C#,Msmq,Nservicebus,Windows Server 2008 R2,我有两个简单的控制台应用程序来集成nservicebus。一个是发布者,另一个是订阅者。本例中的订户还通过Send()从另一个web应用程序接收其他消息。当我在我的开发环境中本地运行它们时,没有问题,一切都按预期工作。我可以从web应用程序发送消息,在我的“订阅者”上接收消息,也可以在我的订阅者上接收已发布的消息 但是,在部署到Server 2008 R2时,订阅服务器会向发布服务器StatusQueue发送一条初始消息,其中包含以下内容: <?xml version="1.0"?>

我有两个简单的控制台应用程序来集成nservicebus。一个是发布者,另一个是订阅者。本例中的订户还通过
Send()
从另一个web应用程序接收其他消息。当我在我的开发环境中本地运行它们时,没有问题,一切都按预期工作。我可以从web应用程序发送消息,在我的“订阅者”上接收消息,也可以在我的订阅者上接收已发布的消息

但是,在部署到Server 2008 R2时,订阅服务器会向发布服务器StatusQueue发送一条初始消息,其中包含以下内容:

<?xml version="1.0"?>
<Messages xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.net/NServiceBus.Unicast.Transport">
    <CompletionMessage>
        <ErrorCode>0</ErrorCode>
    </CompletionMessage>
</Messages>

0
我想这只是开头的“我想订阅你发布的消息,类型为messages.*”。此消息仅位于队列中,发布者从未接收到它

发布者的配置:

<MsmqSubscriptionStorageConfig 
    Queue="StatusQueueSubscriptions" />

    <MsmqTransportConfig
        InputQueue="StatusQueue"
        ErrorQueue="StatusError"
        NumberOfWorkerThreads="1"
        MaxRetries="5"/>
<MsmqTransportConfig
    InputQueue="AppsInputQueue"
    ErrorQueue="AppsError"
    NumberOfWorkerThreads="1"
    MaxRetries="5"/>

  <UnicastBusConfig>
    <MessageEndpointMappings>
      <add Messages="Messages" Endpoint="StatusQueue"/>
    </MessageEndpointMappings>
  </UnicastBusConfig>

订阅服务器的配置:

<MsmqSubscriptionStorageConfig 
    Queue="StatusQueueSubscriptions" />

    <MsmqTransportConfig
        InputQueue="StatusQueue"
        ErrorQueue="StatusError"
        NumberOfWorkerThreads="1"
        MaxRetries="5"/>
<MsmqTransportConfig
    InputQueue="AppsInputQueue"
    ErrorQueue="AppsError"
    NumberOfWorkerThreads="1"
    MaxRetries="5"/>

  <UnicastBusConfig>
    <MessageEndpointMappings>
      <add Messages="Messages" Endpoint="StatusQueue"/>
    </MessageEndpointMappings>
  </UnicastBusConfig>

您的订阅被忽略的可能原因是发送给发布者的传入消息与订阅中定义的类型不匹配

因此,当发布者收到消息时,它将根据其中包含的订阅对其进行评估,并且不会找到匹配项,因此不会向您的订阅者发送消息

这可能是因为NServiceBus中的消息类型不仅由程序集/类型名称定义,还由程序集版本和公钥令牌定义

检查发布者和订阅者持有的消息程序集的版本/PK标记,并确保它们完全匹配

更新

好的,听起来输入队列上的权限在某种程度上阻止了您的发布者服务帐户读取消息。尝试完全控制服务帐户


另外,您是否检查了日志中的错误的默认日志位置?(C:\Users(username)\AppData\Local\Temp)

但是,发布者甚至不会提取队列的消息并将其移动到error或其他位置。它就在那里。您是使用MSMQ作为订阅存储还是SQL server?因此,当您使用MSMQ时,订阅消息不会从队列中删除。他们被关在那里。如果您使用的是SQL server,则订阅将移动到数据库中并从队列中删除。在本地,订阅消息将从输入队列中删除并放入订阅队列中。。。在测试服务器上,它们只是坐在输入队列中。