2012-04-04 9 views
1

Webアプリケーションのリクエスト/レスポンスモデルでMassTransitを使用しています。我々は要求を送信し、応答を受け取ることができます。テスト/デバッグ目的のために、レスポンスハンドラのHandleTimeOutを1時間に設定しています。問題は、サーバーが応答を送信できなかった場合、クライアント側で何もできない(他のページにアクセスできない)場合です。 IISがリセットされるまで、アプリケーションサーバーはブラウザーからの他の要求に応答しません。これは予想される動作です。それが可能であれば、誰かがIISが他のページ要求に応答しない理由と、その動作を変更する方法があるかどうかを明かにすることができます。MassTransitを使用するとIISがフリーズします

私は私のクライアントコードは、Aで複数のメッセージを処理するように設定されていないMassTransitが原因かもしれないこの

var bus = IoC.Resolve<IServiceBus>(); 
bus.GetEndpoint(new Uri("msmq://localhost/MassTransit_ServerQueue")) 
         .SendRequest(new Message(), bus, rc => 
         { 
          rc.HandleTimeout(new TimeSpan(1, 0, 0), 
           () => { }); 
          rc.Handle<MessageResponse>(resmess => 
          { 

          }); 
          rc.Handle<MassTransit.Fault<Message>> 
           (resmess => 
            { 

            }); 
         }); 

答えて

3

理由は、あなたのASP.NetのWebアプリケーションのユーザーが、Webアプリケーションに基本的にシリアル化されたアクセス権を持っているということです - あなたは、単一のユーザー・セッションのためにASP.Netでの並列要求を持つことはできませんあなたがインターフェイスIRequiresSessionStateが実装されていないカスタムHttpHandlerを呼び出す場合を除き、id。

応答が得られず、タイムアウトに1時間待っていると、あなたが結んだスレッドがなくなるまで、そのアプリケーションドメインのその1時間の間、そのユーザーに対するhttpリクエストが増えることはありませんメッセージの待機中にタイムアウトしました。

+0

ありがとう、それは私の問題を説明する – Avinash

0

のように見えます

builder.Register(c => ServiceBusFactory.New(sbc => 
     { 
      sbc.UseMsmq(); 
      sbc.VerifyMsDtcConfiguration(); 
      sbc.VerifyMsmqConfiguration(); 
      sbc.ReceiveFrom("msmq://localhost/MassTransit_ClientQueue"); 
      sbc.UseBinarySerializer(); 
      sbc.SetCreateTransactionalQueues(false); 
     })).As<IServiceBus>().SingletonScoped(); 

autofacモジュールにバスを登録しています時間。

http://readthedocs.org/docs/masstransit/en/latest/configuration/config_api.html#bus-tuning-options

ServiceBusFactory.New(sbc => 
{ 
    //... 
    sbc.SetConcurrentConsumerLimit(5); //try setting this to a larger number. 
    //... 
}); 
+0

デフォルトは4 * Environment.ProcessorCountのようなものなので、そうではありません。 – Henrik