1

我们在 Web 应用程序的请求/响应模型中使用 MassTransit。我们能够发送请求并接收响应。出于测试/调试目的,我们将响应处理程序上的 HandleTimeOut 设置为 1 小时。问题是当服务器无法发送响应时,我无法在客户端做任何事情(我无法访问任何其他页面)。在重置 IIS 之前,应用程序服务器不会响应来自浏览器的任何其他请求。这是预期的行为。如果可以的话,有人可以解释一下为什么 IIS 没有响应任何其他页面请求,以及是否有办法改变这种行为。

我在 autofac 模块中注册总线

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

我的客户端代码如下所示

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

                                    });
                        });
4

2 回答 2

3

原因是您的 ASP.Net Web 应用程序的用户基本上已经序列化了对您的 Web 应用程序的访问——您不能在 ASP.Net 中对单个用户会话 id 进行并行请求,除非您调用的自定义 HttpHandler 没有没有实现接口IRequiresSessionState

因此,如果您没有得到响应,并且您等待一个小时以等待超时,那么您将无法在该小时内为该应用程序域为该用户发出更多 http 请求,直到您捆绑等待的线程消息已超时。

于 2012-04-26T21:19:43.800 回答
0

这可能是由于 MassTransit 未配置为一次处理多条消息。

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.
  //...
});
于 2012-04-06T22:57:03.330 回答