質問
NServiceBus経由でメッセージを送信できません。 Win7 x64で開発しているASP.Net MVC Webアプリがあり、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は、インターフェイスマーカーIMessageを使用し、Serializable属性で装飾されたPricingInformation.Messagesの単純なクラスです。
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へ。
まだ何を試みても、私が微調整したとしても(すでに3時間経過している場合)、メッセージはキューに表示されません。私は例外を見つけることができず、すべてのデバッグレベルのログを記録しています。
解決
問題は、手動でキューを非トランザクションとして設定した場合、機能しないことです。 NServiceBus&quot; IsTransactional&quot;の設定プロパティをfalseに設定しても、非トランザクションキューで作業できるというわけではありません。
キューを削除してトランザクションとして再作成するか、v2.0のベータ版を使用している場合は、NServiceBusでキューを作成してください。