ESBのバックグラウンドがなく、初めてNServiceBusを使用するのに苦労しています。ブログの投稿、サンプル、ドキュメントなどを読んだ後、C#クラスライブラリがメッセージを送信しない理由がわかりません。on Bus.Send(msg)「メッセージMessages.TraceStatementに宛先が指定されていません。メッセージを送信できません。構成ファイルのUnicastBusConfigセクションをチェックして、メッセージタイプにMessageEndpointMappingが存在することを確認してください。」
しかし、最初に、私のアーキテクチャと私がやろうとしていることについて少し説明します。これは、私がそこに見たどのサンプルとも異なるためです。
私の意図は、Benが行ったようにSignalRとNServiceBusを使用することですが、2つの主な変更があります。
- NServiceBus.Host.exeは使用しません。Webのみで、コンソールの実装は必要ありません。
- メッセージは、リアルタイムのコードトレースを目的として、中間層のクラスライブラリから送信されます。つまり、Bus.Sendステートメントをコードの周りに散りばめ、それによってWebページでコード実行トレースステートメント(開発者が設定したアドホック文字列)を表示できるようにしたいのです。
NServiceBusを、私が想像していること(またはテクノロジーの誤用)すらできないほど誤解していないと仮定して、クラスライブラリからメッセージを送信する方法を理解したいと思います。現在、次のようにapp.configファイルを持つ「Managers」dllがあります。
<configuration>
<configSections>
<section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core" />
<section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core" />
</configSections>
<MsmqTransportConfig InputQueue="TerminalQueue" ErrorQueue="TerminalErrorQueue" NumberOfWorkerThreads="1" MaxRetries="5"/>
<UnicastBusConfig>
<MessageEndpointMappings>
<add Messages="Messages" Endpoint="WorkerQueue" />
</MessageEndpointMappings>
</UnicastBusConfig>
</configuration>
注:Benのプロジェクトでは、「Commands」の名前を「Messages」に変更しました。したがって(私の投稿の上部にあるエラーメッセージを参照してください)、私が知る限り、MessageEndpointMappingを適切に定義しました。(キューがMSMQに存在することを確認しました。)
誰かが私が間違っていることを教えてもらえますか?
また、NServiceBus.Host.exeの依存関係を削除する方法についての情報をいただければ幸いです(BenのサンプルのWorkerプロジェクトを参照してください)。理想的には、クラスライブラリがメッセージを送信し(ターミナルがBenのプロジェクトで行ったように)、Webアプリはサブスクライバーとしてイベントを処理し、SignalRを使用してメッセージを表示できます。
アップデート
現在、Web.configでカバーできると思うので、クラスライブラリプロジェクトの構成DLLを破棄しました。したがって、私のWeb.configは次のようになります。
<section name="microsoft.web.services3" type="Microsoft.Web.Services3.Configuration.WebServicesConfiguration, Microsoft.Web.Services3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core" />
<section name="MsmqSubscriptionStorageConfig" type="NServiceBus.Config.MsmqSubscriptionStorageConfig, NServiceBus.Core" />
<section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core" />
<MsmqTransportConfig
InputQueue="WebQueue"
ErrorQueue="WebErrorQueue"
NumberOfWorkerThreads="1"
MaxRetries="5"
/>
<UnicastBusConfig>
<MessageEndpointMappings>
<add Messages="MessageEvents" Endpoint="WebQueue" />
</MessageEndpointMappings>
</UnicastBusConfig>
また、 http: //docs.particular.net/nservicebus/messaging/publish-subscribe/に従って、「NServiceBus_Subscriptions」と呼ばれるプライベートtramsactionalキューを作成しました。
私のGlobal.asax.csにはこれがあります:
Bus = Configure
.WithWeb()
.DefaultBuilder()
.XmlSerializer()
.MsmqTransport()
.PurgeOnStartup(false)
.UnicastBus()
.LoadMessageHandlers()
.MsmqSubscriptionStorage()
.CreateBus()
.Start();