2009-09-09 73 views
7

我有一个netMsmqBinding的WCF服务。我的客户端可以将消息发送到我的队列,并且在服务运行时它会按预期从队列中检索消息。如果服务未运行,则接收到的消息将排队,直到服务启动。WCF MSMQ与IIS服务绑定 - 如何实例化服务?

我的问题是,当消息到达队列时服务不会启动。该服务托管在IIS中,因此它在IIS收到请求之前不会实例化。如果我浏览到服务,那么它会处理队列中的消息,但显然这不是我期望的处理队列的方法!我希望我需要更改服务实现,或者更改IIS设置,但我不知道要在哪里更改或要更改哪些内容。

UPDATE

有谁真正使用过MSMQ WCF?我在短时间内工作 - 我启用了在同一台服务器上的不同网站的绑定,但现在它以某种方式再次停止工作。

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

回答

5

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

检查this blogpostthis screencast应该给你所有的细节。

2

我相信使用过MSMQ WCF结合我的问题主要是围绕IIS。

我没有使用的Windows XP/Server 2003中使用IIS 6

使用Windows 7或Windows Server 2008与IIS问题结束7.5一切正常。

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

0

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

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

我遇到了一篇很好的文章,介绍了如何使用Net实现带MSMQ的WCF。Msmq绑定:
Setup MSMQ with WCF using Net.Msmq binding