2011-01-06 15 views
4

私はメッセージを正常に処理するサブスクライバを持っており、その後、特定のイベントが発生したことを示す別のメッセージを正常に発行します。最初のメッセージとシステムの送信者へのメッセージは、次のメッセージで失敗します。NServiceBus - 公開後のメッセージへの返信

メッセージNServiceBus.Unicast.Transport.CompletionMessageに指定された宛先がありません。メッセージは送信できません。設定ファイルのUnicastBusConfigセクションをチェックし、メッセージタイプにMessageEndpointMappingが存在することを確認してください。

Bus.Publish(orderMessage); 

Bus.Return((int)MySendBus.Core.ErrorCode.Ok); 

を、次のようにapp.configをである::

次のようにリターンコードが見えます

<configuration> 
    <configSections> 
    <section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core"/> 
    </configSections> 

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

私は、ユニキャストセクションを追加し、まだ同じエラーを取得しました。私の理解は、NServicebusがメッセージに返信する方法を知っているため、app.configにあるMsmqTransportConfig入力キュー以外の応答キューを指定する必要はありません。

サブスクライバにメッセージを発行してから、メッセージの送信先に応答させることはできますか?

+0

ユニキャストセクションを投稿できますか?私はBus.Reply()を使って成功しました。あなたのために働くでしょうか? –

答えて

7

あなたがBus.Return()を使用する場合は、あなたが戻ってそのようなクライアントエンドポイント上のコールを登録する必要があります。

Bus.Send<IRequestDataMessage>(m => 
      { 
       m.DataId = g; 
       m.String = "<node>it's my \"node\" & i like it<node>"; 
      }) 
       .Register(i => Console.Out.WriteLine(
            "Response with header 'Test' = {0}, 1 = {1}, 2 = {2}.", 
            Bus.CurrentMessageContext.Headers["Test"], 
            Bus.CurrentMessageContext.Headers["1"], 
            Bus.CurrentMessageContext.Headers["2"])); 

あなたが選んだの完全なメッセージを返すようにしたい場合は、(Bus.Replyを使用)、クライアントエンドポイントにハンドラを記述します。私の完全なサンプルはhereです。

+0

アダムありがとう。あなたはサンプルであり、正しい方向に私を助けてくれました。 サンプルを使用して、私は最初のメッセージの送信者にMsmqTransportConfigがないことに気付きました。これで問題は解決しました。 – Adam

+0

http://www.nservicebus.com/faq/ReplyingToMessages.aspx – Adam

関連する問題