簡體   English   中英

WCF MSMQ與IIS服務綁定 - 如何實例化服務?

[英]WCF MSMQ binding with an IIS service - how to instantiate the service?

我有一個帶netMsmqBinding的WCF服務。 我的客戶端可以將消息發送到我的隊列,當服務運行時,它會按預期從隊列中檢索消息。 如果服務未運行,則收到的消息將排隊,直到服務啟動。

我的問題是當郵件到達隊列時服務沒有啟動。 該服務托管在IIS中,因此在IIS收到請求之前不會對其進行實例化。 如果我瀏覽到該服務,那么它會處理隊列中的消息,但顯然這不是我想要的處理隊列的方法!

我希望我需要更改服務實現,或更改IIS設置,但我不知道改變的位置或內容。

UPDATE

有沒有人真正使用MSMQ而不是WCF? 我有這個工作很短的時間 - 我在同一台服務器上的另一個網站啟用綁定,奇怪 - 但現在它已經不知何故再次停止工作。

我遇到的唯一問題是當隊列中有消息時激活服務。 目前,隊列僅在實例化服務時進行處理,例如,當我瀏覽.svc文件時。 我在應用程序上啟用了net.msmq協議,並且我在網站上啟用了net.msmq綁定...還有什么我需要做的嗎?

您明確需要為非HTTP激活配置IIS。 我不知道我頭腦中的所有細節,但基本上你需要使用appcmd來配置和啟用net.msmq綁定激活。

查看此博文此截屏視頻應該為您提供所有詳細信息。

這可能會節省一些人花費的時間: http//msdn.microsoft.com/en-us/library/ms731053.aspx

我相信我在WCF上使用MSMQ綁定的問題主要是圍繞IIS。

使用帶有IIS 6的Windows XP / Server 2003時,我沒有遇到任何問題。

使用Windows 7或Server 2008與IIS 7.5一切正常。

更好的建議是將MSMQ作為托管服務/ Windows服務或獨立應用程序運行,而不是在IIS下運行。

一種選擇是將其作為Windows服務托管。 由於IIS在隊列中放置消息時不會自動激活WAS。
另一種選擇是創建一個簡單的Windows服務,在指定的時間間隔后ping該服務。 我們在同一服務上公開了另一個合同, 沒有IsOneWay = true (因為此操作不會與隊列交互)。 然后創建一個Windows服務,在一段指定的時間間隔后ping WCF服務URL,這可確保WAS進程始終處於活動狀態,並且一旦隊列中有消息,WCF就會接收消息。

此外,確保服務也托管在http和net.msmq上。

我發現了一篇很好的文章,提供了使用Net.Msmq綁定實現WCF和MSMQ的分步指南:
使用Net.Msmq綁定使用WCF設置MSMQ

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM