NServiceBus を使用する ASP.Net WebAPI アプリケーションがあります。コマンドは、アプリケーションから、NSB ホストを実行しているバックエンド サーバーに送信されます。サーバーは、データベースとの通信を担当します。
ほとんどのコマンドは、ファイア アンド フォーゲットです。単純な Bus.Send(...) と Web クライアントがすぐに解放されるため、操作を非同期で行うことができます。
例外は、データベースに新しいレコードを作成するコマンドです。データベースは、新しく作成されたエンティティの ID を生成する役割を担っており、それを呼び出し元に返す必要があります。これは発信者が固執する必要があるためパフォーマンスが低下しますが、私の状況では許容できるヒットです。
全二重サンプルに記載されているように、これには Bus.Reply() 機能をうまく使用しています。新しく生成された Id の単一のプロパティを持つメッセージで返信しています。Web 側では、(WebAPI の非同期機能を利用して) タスクの継続にコールバックを登録し、Bus.Send() に続いて .Register を使用しました。
これはすべて正常に機能しています。非常に簡単で簡単な方法で、私が望むものを正確に達成します。唯一の問題は、クライアントが応答メッセージを受信するたびに、次のような警告をログに記録することです。
2012-09-11 16:46:44,745 [Worker.26] WARN NServiceBus.Unicast.Transport.Transactional.TransactionalTransport [(null)] - Failed raising 'transport message received' event for message with ID=1faee572-f904-4b09-b1d5-c0bd7c12738d\82936
System.InvalidOperationException: No handlers could be found for message type: MyProject.Messages.MyEntityCreatedResponseMessage
at NServiceBus.Unicast.UnicastBus.HandleTransportMessage(IBuilder childBuilder, TransportMessage msg)
at NServiceBus.Unicast.UnicastBus.TransportMessageReceived(Object sender, TransportMessageReceivedEventArgs e)
at System.EventHandler`1.Invoke(Object sender, TEventArgs e)
at NServiceBus.Unicast.Transport.Transactional.TransactionalTransport.OnTransportMessageReceived(TransportMessage msg)
どうすればこの警告を取り除くことができますか? ここではメッセージ ハンドラは必要ありません。