无法在IIS Express上使用带有MSMQ的大规模传输

本文关键字:MSMQ 传输 大规模 IIS Express | 更新日期: 2023-09-27 18:09:25

我有一个。net MVC 4 web应用程序,使用MassTransit与MSMQ。我们有几个遗留的应用程序使用MSMQ,所以我被限制在那个协议。我的global.asax.cs文件中的Application_Start()中的客户端代码如下所示:

Bus.Initialize(sbc =>
{
    sbc.UseMsmq(a => a.UseSubscriptionService("msmq://localhost/mt_subscriptions"));
    sbc.ReceiveFrom("msmq://localhost/webconsole?tx=false&recoverable=false");
    sbc.UseControlBus();
    sbc.UseBinarySerializer();
});

我在Windows 8.1开发盒上运行这个应用程序,并且这个调用成功完成&当我在IIS 8.5上运行它时,通信工作正常。但是,当我在IIS Express 8.0上运行它时,调用永远不会完成,并且最终会抛出超时错误。我在IIS Express FAQ中找到了以下内容:

    Q: Does IIS Express support non-HTTP protocols such as net.tcp or MSMQ?
    A: No. IIS Express only supports HTTP and HTTPS as its protocol.

好的,足够公平,但我不明白web服务器与MSMQ有什么关系(除了在HTTP上使用MSMQ,我不打算这样做);我没有任何"msmq://"路由或类似的东西。MassTransit不直接使用MSMQ而不通过web服务器吗?我不敢相信我是唯一一个使用MassTransit在IIS Express上开发的开发人员。

对于这里发生的事情有什么见解吗?谢谢!

无法在IIS Express上使用带有MSMQ的大规模传输

所以我终于弄清楚了,我想我应该把答案贴出来,也许可以避免别人撞到这堵墙。在启动期间,MassTransit会查看Windows性能计数器是否可用。由于某些原因,在IIS Express上运行时检查它们的存在会导致挂起调用。你可以在这里找到关于这个主题的整个讨论线程,这也是SignalR和温莎城堡开发者的一个问题:https://groups.google.com/forum/#!topic/masstransit-discuss/Pz7ttS7niGQ。作为讨论的结果,MassTransit开发人员在他们的API中添加了一个DisablePerformanceCounters()方法,并且在创建服务总线时调用该方法解决了我的问题。