NServiceBus MSMQ Invia domanda
-
05-07-2019 - |
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
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.