2012-01-26 15 views
4

私はこの問題に数日間苦しんでおり、わかりません。NServiceBus Bus.Send()。IIS/Windows Server 2008で登録されていない(コールバック)

IISとWindows Server 2008 R2でホストされている単純なWCF Webサービスがあります。次のようにWebサービスの実装は次のとおりです。

 var completionResult = new CompletionResult(); 
     var updateTextMessage = new UpdateText { TextTemplateId = textTemplateId, Text = text }; 

     var asyncResult = Global.Bus.Send(updateTextMessage).Register(x => completionResult = x.AsyncState as CompletionResult, null); 
     asyncResult.AsyncWaitHandle.WaitOne(10000); 

     if (completionResult.Messages != null && completionResult.Messages.Length > 0) 
     { 
      return ((UpdateTextResponse)completionResult.Messages[0]).ImageData; 
     } 

     return string.Empty; 

私は同期的にNSBを使用しようとすると、悪いデザインと考えられているが、私はちょうど試していると私は本当にこの作業を取得したいことを知っています。したがって、メッセージは正常にリモートエンドポイントに送信され、メッセージは正常に処理されますが、リモートエンドポイントがBus.Replyを実行すると、応答メッセージは単にエーテル内で失われます。私はNSBの最新バージョンを使用しています。奇妙なことに、これは私のWindows 7開発マシンでうまく動作します。私は両方のマシンでアクティブディレクトリがオフになっていることを確認しました。私はまた、受信エンドポイントでWiresharkを実行し、十分に私はパケットデータの着信メッセージを参照してください。何かがIISに邪魔されていないようです。私は両方のエンドポイントについてもロギングしきい値をDEBUGに切り替えましたが、何も変わっていません。ここで

 Bus = NServiceBus.Configure.WithWeb() 
      .Log4Net() 
      .DefaultBuilder() 
      .XmlSerializer() 
      .MsmqTransport() 
       .IsTransactional(false) 
       .PurgeOnStartup(false) 
      .UnicastBus() 
       .ImpersonateSender(false) 
      .CreateBus() 
      .Start(); 

は、エンドポイントのコンフィグます:

IIS Config (this side is not getting the response) 

<MsmqTransportConfig InputQueue="Web.InputQueue" ErrorQueue="Web.ErrorQueue" MaxRetries="5" NumberOfWorkerThreads="1"/> 
    <UnicastBusConfig> 
    <MessageEndpointMappings> 
     <add Messages="Messages" Endpoint="Node.Distributor.DataInputQueue"/> 
    </MessageEndpointMappings> 
    </UnicastBusConfig> 

--------------------------------------------------------------- 

Endpoint which does the reply 

<MsmqTransportConfig ErrorQueue="Node.ErrorQueue" InputQueue="Node.InputQueue" MaxRetries="5" NumberOfWorkerThreads="1"/> 
<UnicastBusConfig DistributorControlAddress="Node.Distributor.ControlInputQueue" DistributorDataAddress="Node.Distributor.DataInputQueue" /> 

私はまた、送信エンドポイントは、ここではWebコンポーネントのための私のApplication_Startupのコードである「...にメッセージを送る」いつも言います通信をテストする2つのスタンドアロンのNServiceBusHostアプリケーションが作成され、正常に動作しました。私はまた、返信アドレスをハードコーディングし、.Replyを.Sendに置き換えましたが、実際の宛先を指定しましたが、それでも動作しませんでした。だから再びIISに関連しているようです。どんな助けでも大歓迎です!

+0

nservicebus設定エンティティを投稿できますか?また、リモートエンドポイントからbus.Reply()のアドレスを確認する価値があります。 – Rajesh

+0

私はconfigsを投稿しました。ありがとう! – thehin

答えて

1

私はこの問題を解決しました。

<UnicastBusConfig DistributorControlAddress="[email protected]" DistributorDataAddress="[email protected]" /> 

しかし、それはNServiceBusの販売代理店は、IPを好きではないことが判明:迷子に回答した理由は、私のような代理店を参照したことによるものであったが判明。そこで以下に変更しました:

<UnicastBusConfig DistributorControlAddress="[email protected]" DistributorDataAddress="[email protected]" /> 

これが問題を解決しました。 NSB/MSMQはホスト名を使用しているので、Windowsでホストファイルを更新する必要もありました。私はこれがNServiceBusのバグか、それが既知の問題かどうかはわかりませんが、もしそれがまだない場合は、実際に文書化されるべきです。

0

私にはキューのアクセス許可があります。 WCF側のキューを調べて、msmqがメッセージを配信することさえできるかどうかを確認してください。

+0

お返事ありがとうございます。私はアクセス許可が良いと思う。私は、アプリケーションプールを開始する前にキューを削除し、NSBはキューがWCFサービスがヒットした後に作成されたように見えるでしょう。私はさらに、 "Everyone"ユーザにWCFのサイド・キューをフル・コントロールで与えても、それは役に立たなかった。 – thehin

関連する問題