WCF net.msmq服务自动激活

时间:2009-07-28 14:13:50

标签: wcf msmq

我必须使用在IIS 7中托管的net.msmq协议的WCF服务。我的问题是,当队列中出现新消息时,服务不会激活,您必须先实际浏览到服务他们会开始接收任何信息。

有没有办法自动激活这些服务?

提前感谢您提供任何帮助

亲切的问候, 布赖恩

7 个答案:

答案 0 :(得分:3)

在Tom Hollander的博客上,有一个非常好的三部分系列关于让WCF,MSMQ和IIS运行起来并且很好地一起玩:

也许那些会有所帮助?如果一切配置正确,IIS7中托管的MSMQ肯定会自动获取WCF消息。

有一些设置没有开箱即用 - 请参阅第1部分。您可能需要添加和启用其他Windows功能,并且可能需要运行appcmd.exe工具来配置WAS(Windows激活服务器,IIS7的一部分,用于自动处理非http请求。

马克

答案 1 :(得分:3)

我知道这是一个老帖子,但万一有其他人来找问题......

如果应用程序池关闭后服务没有激活,很可能是因为队列名称与服务URI不匹配,因此WAS不知道要激活哪个应用程序。

例如,如果您在默认网站中创建应用程序“服务”并拥有FirstService.svc,则队列名称应为 private $ \ Services / FirstService.svc

[编辑:队列名称应包含多个应用程序名称]

答案 2 :(得分:2)

这是因为使用MSMQ时WAS不会自动激活或“预热”。解决方案是查看IIS 7 Warm Up module或者像负载均衡器一样ping你的服务(我们使用F5设备来执行此操作)。更新 - 这是IIS 8 App Initialization

的链接

答案 3 :(得分:0)

我发现,在带有IIS 7.5和.NET 4.0的Windows 7上,NetMsmqActivator服务被禁用并默认停止。您需要启用它并启动它。

此外,队列必须允许应用程序池使用的帐户和NetMsmqActivator使用的帐户使用“接收消息”和“查看消息”。在默认安装中,您可以使用IIS APPPOOL\ASP.NET v4.0(您必须输入:3'P',请注意空格)和NETWORK SERVICE

答案 4 :(得分:0)

我们已经在具有这些属性的系统中观察了这个问题一个多月了:

  • 基于http和msmq的混合服务,基于IIS7.5上的WAS托管
  • 使用的msmq协议:net.msmq
  • 服务不在根网站中,而是在
  • 下的应用程序中

我们一直在执行涉及以下方面的所有准则和解决问题的技术: * iis和应用程序级别的协议设置。 *队列命名 *队列,Windows服务和iis的安全设置

但问题仍然存在。 我们的解决方案是:http://www.daczkowski.net/tag/wcf/ 那就是将appfabric安装到我们的iis上并设置自动启动服务。

问题本身很难完全定义,我们可以说只是“有时服务会停止从队列中处理”

答案 5 :(得分:0)

我的解决方案是这里的一些答案。 我的队列具有身份验证启用功能,因此如果不使用身份验证,则可能不需要执行某些步骤。

以下是我在Windows 2012上执行的步骤:

1)安装非http激活服务WAP(https://msdn.microsoft.com/en-us/library/ms731053(v=vs.110).aspx

2)创建与IIS应用程序同名的队列,如private$/<WCF application>/myservice.svc

Net.Msmq Listener Adapter服务将尝试匹配IIS中的队列和WCF应用程序名称,如VdesmedT所指示。

3)在现场和应用程序上启用协议。

首先创建绑定:

  

%windir%\ system32 \ inetsrv \ appcmd.exe设置网站&#34;默认网站&#34;    - +绑定[协议=&#39;的net.tcp&#39;,bindingInformation =&#39; 808:*&#39;]

网站绑定应如下所示: enter image description here

然后为网站启用协议net.msmq

  

%windir%\ system32 \ inetsrv \ appcmd.exe设置配置   -section:system.applicationHost / sites&#34; / [name =&#39;默认网站&#39;]。[path =&#39; /&#39;] .enableProtocols&#34;:&#34 ; HTTP,net.msmq&#34; /提交:APPHOST

此命令将重写协议,因此如果您具有多个http启用,则需要将其添加到命令行。

在Advanced Settins,您应该看到:

enter image description here

最后为应用程序启用协议net.msmq

  

%windir%\ system32 \ inetsrv \ appcmd.exe设置应用&#34;默认网站/&#34; /enabledProtocols:http,net.tcp

应用程序的“高级设置”屏幕应显示与已启用的协议行在站点的“高级设置”中显示的内容相同的内容。

4)将IIS应用程序的队列权限授予读取,查看和删除,获取属性和设置属性。 默认帐户是IIS Apppool \ DefaulApp

5)授予服务队列Net.Msmq Listener Adapter的权限(默认为Network Service

不需要但我必须在更改权限后重新启动。

检查:

  • 要检查WCF是否设置正确,只需使用浏览WCF即可 应用程序来激活它。应该处理队列中的任何消息。

  • 要检查WAS是否正在激活WCF应用程序,请回收应用程序池并发送新消息。如果是的话 它应该立即处理。

答案 6 :(得分:-1)

只需在IIS中将应用程序自动启动设置为“启用”

即可