2012-04-04 18 views
1

Wir verwenden MassTransit in einem Request/Response-Modell in unserer Webanwendung. Wir können Anfragen senden und Antworten erhalten. Zu Testzwecken/Debugging-Zwecken Wir setzen das HandleTimeOut für den Response Handler auf 1 Stunde. Das Problem ist, wenn der Server keine Antwort sendet, kann ich auf der Client-Seite nichts tun (ich kann nicht auf eine andere Seite zugreifen). Der Anwendungsserver reagiert auf keine anderen Anforderungen vom Browser, bis der IIS zurückgesetzt wird. Ist das erwartetes Verhalten? Wenn dies der Fall ist, kann jemand aufklären, warum IIS auf keine anderen Seitenanforderungen reagiert und ob es eine Möglichkeit gibt, dieses Verhalten zu ändern.IIS friert bei Verwendung von MassTransit ein

ich den Bus in einem Autofac Modul am Registrierung

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(); 

Mein Client-Code wie dieses sein Es könnte

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 => 
            { 

            }); 
         }); 

Antwort

3

Der Grund dafür ist, dass Ihr Benutzer für Ihre ASP.Net Web-Anwendung im Grunde serialisierten Zugriff auf Ihre Web-Anwendung hat - nicht parallel Anfragen in ASP.Net für eine einzelne Benutzersitzung haben ID, es sei denn, Sie rufen einen benutzerdefinierten HttpHandler auf, bei dem die Schnittstelle IRequiresSessionState nicht implementiert ist.

Wenn Sie also keine Antwort erhalten und eine Stunde auf eine Zeitüberschreitung warten, können Sie bis zu diesem Thread keine weiteren HTTP-Anfragen für diesen Benutzer für diese Anwendungsdomäne erstellen Warten auf eine Nachricht ist abgelaufen.

+0

Danke, das erklärt mein Problem – Avinash