Domanda

Ho difficoltà a inviare un messaggio tramite NServiceBus. Ho un'app Web ASP.Net MVC, sviluppata su Win7 x64, ho configurato il mio web.config come

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

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

In application_start collego quanto segue:

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

Quando l'azione che mi interessa si verifica nell'app che sparo

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

ModelSupplierDetailsUpdatedMessage è una classe semplice in PricingInformation.Messages che utilizza l'interfaccia Marker IMessage e decorato con l'attributo Serializable.

Le code MSMQ sono configurate, non transazionali, e tutti, compreso il SERVIZIO DI RETE e IIS_IUSRS, hanno il pieno controllo (in misure di risoluzione dei problemi separate)

log4net mostra quanto segue:

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

DEBUG NServiceBus.Utils.MsmqUtilities 14 - Verifica dell'esistenza di una coda: errore. DEBUG NServiceBus.Unicast.UnicastBus Worker.15 - Chiamare 'HandleBeginMessage' su NServiceBus.SagaPersisters.NHibernate.NHibernateMessageModule INFO NServiceBus.Unicast.UnicastBus Worker.15 - lavoratore inizializzato. DEBUG NServiceBus.Unicast.UnicastBus Worker.15 - Chiamare 'HandleEndMessage' su NServiceBus.SagaPersisters.NHibernate.NHibernateMessageModule DEBUG NServiceBus.Unicast.UnicastBus 9 - Invio messaggio PricingInformation.Messages.ModelSupplierDetailsUpdatedMessage, PricingInformation.Messages, Versione = 1.0.0.0, Culture = neutral, PublicKeyToken = null con ID 2c642672-1 -90f-90f 734e2fdd726d \ 8267 al lavoratore destinazione2.

Eppure, indipendentemente da ciò che provo e da ciò che modifica (ci sono già stato tre ore) il messaggio non viene mai visualizzato in coda. Non riesco a trovare un'eccezione e ho il logging a livello di debug su tutto .. È probabilmente qualcosa di semplice aiuto

È stato utile?

Soluzione

Il problema è che se imposti manualmente le tue code come non transazionali, allora non funzionerà. Impostazione di NServiceBus "IsTransactional" la proprietà su false non significa che puoi lavorare con code non transazionali.

Prova a eliminare le code e ricrearle come transazionali o, se stai utilizzando la beta di v2.0, consenti a NServiceBus di creare le code per te.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top