WCF MSMQ与IIS服务绑定 - 如何实例化服务?

时间:2009-09-09 12:05:09

标签: wcf iis msmq msmq-wcf

我有一个带有netMsmqBinding的WCF服务。我的客户端可以将消息发送到我的队列,当服务运行时,它会按预期从队列中检索消息。如果服务未运行,则收到的消息将排队,直到服务启动。

我的问题是当邮件到达队列时服务没有启动。该服务托管在IIS中,因此在IIS收到请求之前不会对其进行实例化。如果我浏览到该服务,那么它会处理队列中的消息,但显然这不是我想要的处理队列的方法!

我希望我需要更改服务实现,或者更改IIS设置,但我不知道在哪里或需要更改。

更新

有没有人实际使用MSMQ而不是WCF?我有这个工作很短的时间 - 我在同一台服务器上的不同的网站上启用了绑定,奇怪的是 - 但现在它已经以某种方式再次停止工作。

我遇到的唯一问题是当队列中有消息时激活服务。目前,队列仅在实例化服务时进行处理,例如,当我浏览.svc文件时。我在应用程序上启用了net.msmq协议,并且我在网站上启用了net.msmq绑定...还有什么我需要做的吗?

4 个答案:

答案 0 :(得分:5)

您明确需要为非HTTP激活配置IIS。我不知道我头脑中的所有细节,但基本上你需要使用appcmd来配置和启用net.msmq绑定激活。

检查this blogpostthis screencast应该为您提供所有详细信息。

答案 1 :(得分:3)

这可能会节省一些人花费的时间: http://msdn.microsoft.com/en-us/library/ms731053.aspx

答案 2 :(得分:2)

我认为我在WCF上使用MSMQ绑定的问题主要是围绕IIS。

使用带有IIS 6的Windows XP / Server 2003时,我没有遇到任何问题。

将Windows 7或Server 2008与IIS 7.5配合使用,一切正常。

更好的建议是将MSMQ作为托管服务/ Windows服务或独立应用程序运行,而不是在IIS下运行。

答案 3 :(得分:0)

一种选择是将其作为Windows服务托管。由于IIS在队列中放置消息时不会自动激活WAS。
另一种选择是创建一个简单的Windows服务,在指定的时间间隔后ping该服务。我们在同一服务上公开了另一个合同,没有IsOneWay = true (因为此操作不会与队列交互)。然后创建一个Windows服务,在一段指定的时间间隔后ping WCF服务URL,这可确保WAS进程始终处于活动状态,并且一旦队列中有消息,WCF就会收到消息。

此外,确保该服务也托管在http& net.msmq。

我遇到了一篇很好的文章,介绍了使用Net.Msmq绑定实现WCF与MSMQ的分步指南:
Setup MSMQ with WCF using Net.Msmq binding