NServiceBus MSMQ发送问题

时间:2009-10-22 10:36:02

标签: msmq nservicebus

我无法通过NServiceBus发送消息。我有一个ASP.Net MVC Web应用程序,在Win7 x64上开发,我已经将我的web.config配置为

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

  <UnicastBusConfig>
    <MessageEndpointMappings>
      <add Messages="PricingInformation.Messages" Endpoint="worker2" />
    </MessageEndpointMappings>   </UnicastBusConfig>

在application_start中,我连接了以下内容:

var bus = NServiceBus.Configure.WithWeb()
            .StructureMapBuilder()
            .XmlSerializer()
            .MsmqTransport()
                .IsTransactional(false)
                .PurgeOnStartup(false)
            .UnicastBus()
                .ImpersonateSender(false)
            .CreateBus()
            .Start();

当我感兴趣的动作发生在应用程序中时我会开火

    public override void HandleEvent(SupplierPricingUpdatedEvent updatedEvent)
    {
        bus.Send(new ModelSupplierDetailsUpdatedMessage() {Id = updatedEvent.Id})
        return;
     }

ModelSupplierDetailsUpdatedMessage是PricingInformation.Messages中的简单类,它使用接口标记IMessage并使用Serializable属性进行修饰。

MSMQ队列是设置的,而不是事务性的,包括NETWORK SERVICE和IIS_IUSRS在内的每个人都有完全控制权(在严重的故障排除措施中)

log4net显示以下内容:

DEBUG NServiceBus.Utils.MsmqUtilities  14 - Checking if queue exists: worker.

DEBUG NServiceBus.Utils.MsmqUtilities 14 - 检查队列是否存在:错误。 DEBUG NServiceBus.Unicast.UnicastBus Worker.15 - 在NServiceBus.SagaPersisters.NHibernate.NHibernateMessageModule上调用'HandleBeginMessage' INFO NServiceBus.Unicast.UnicastBus Worker.15 - 工作人员已初始化。 DEBUG NServiceBus.Unicast.UnicastBus Worker.15 - 在NServiceBus.SagaPersisters.NHibernate.NHibernateMessageModule上调用'HandleEndMessage' DEBUG NServiceBus.Unicast.UnicastBus 9 - 发送消息 PricingInformation.Messages.ModelSupplierDetailsUpdatedMessage,PricingInformation.Messages,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null,ID为2c642672-1bf1-48d4-a90f- 734e2fdd726d \ 8267到目的地worker2。

然而,无论我尝试什么,以及我调整的内容(已经有三个小时),消息都不会出现在队列中。我找不到异常,我有调试级别记录所有内容..它可能是一个简单的帮助

1 个答案:

答案 0 :(得分:6)

问题是,如果您手动将队列设置为非事务性的,那么它将无法正常工作。将NServiceBus“IsTransactional”属性设置为false并不意味着您可以使用非事务性队列。

请尝试删除队列并将其重新创建为事务性,或者,如果您使用的是v2.0的测试版,只需让NServiceBus为您创建队列。