2011-06-10 76 views
2

组合使用ActiveMQ并在IIS/AppFabric中运行的单个实例WCF服务的最佳方式是什么?如何使用WCF和IIS启动时连接到ActiveMQ

我们的服务需要同时支持HTTP传输和ActiveMQ(侦听和发送消息)。我们选择不使用MSMQ,并使用Spring.Net.NMS。我现在面临的基本问题是,ActiveMQ需要在启动时连接到队列并保持连接状态,但WAS正在使用它的消息激活功能。如果服务在消息到达之前未被激活(HTTP/MSMQ等),则不会触发与AMQ的连接。

我知道我可以禁用回收行为,我知道我可以使用Windows服务进行自托管。但我想利用AppFabric中的监视和其他功能。我已经与IServiceBehavior一起走下了这条路,并将其用于其他好事。但是,只有在(非AMQ)消息到达之前,才会调用该接口。所以它不会为此工作。我所希望的是在ServletContextListeners如何在Java中工作,在那里你同时获得启动和关闭事件。但在WAS中似乎没有这样的东西......它只是由消息到达驱动的。

我已经搜索了3天的每一寸网页信息,唯一遇到的是使用静态类构造(C#)技巧作为触发器。这是一个黑客,但我可以忍受它。它仍然留下彻底关闭的问题,我可以在后面找到。

任何人都有一个坚实的解决方案呢?

回答

1

direct WCF support for ActiveMQ但我想这不是开发了。您的问题实际上是IIS/WAS(为非http协议提供托管)托管体系结构。消息到达时,WAS中的服务始终激活 - 没有全球启动。原因是WAS主机期望有独立的进程(Windows服务)始终运行侦听器,并且此进程具有调用WAS并使用消息级别激活的适配器。我猜你没有这样的ActiveMQ进程,因此你将无法使用WAS中托管的ActiveMQ端点。开发这样的听众可能是一项具有挑战性的任务(example for UDP)。

使用IIS 7.5/AppFabric auto start feature可能会避免创建自定义侦听程序。 run the code when the application starts也没有很好的文档记录方式。