2011-06-10 63 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也沒有很好的文檔記錄方式。