2009-09-09 127 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