我正在設計一個2個WCF服務,我的所有客戶都會連接到這個服務。其中一項服務將是通知服務。WCF雙工 - 將不同的通知推送給每個客戶端?
我希望每個客戶端連接到服務,訂閱它,然後接收通知,使用雙工回調接口(該服務將觸發客戶端的「通知」操作)。
這是我的設計理念:
我的問題是:當每個客戶端連接到我的服務,我會驗證它針對我的數據庫中「用戶」表(我將使用UserNamePasswordValidator並實現「驗證」功能)。
要求:每個用戶都需要根據數據庫中定義的規則接收不同的通知,但他們都使用相同的合同。
例如:
約翰·史密斯的在數據庫中的規則可能是:通知我有超過100美元的價格 所有新產品。
Jane Doe在數據庫中的規則可能是:在所有新產品上通知我,他們的名字以'JA'開頭。
Jim Jabra在數據庫中的規則可能是:通知我所有類型爲「食物」的新產品。
我的服務將有一個工作線程檢測數據庫中的更改(新產品已插入數據庫)。
然後,它應該循環所有連接的客戶端 - 並且每個客戶端都會向他發送新產品通知,只有當它符合客戶端的通知請求時。
再次 - 所有客戶端都會收到相同類型的更新(新產品),但每個客戶端都應根據數據庫中的規則接收不同的產品。
一種方法我想實現,這將是使用辛格爾頓服務,即持有的列表:
- 客戶Enpoint
- 用戶對象(從數據庫)
這樣 - 每當工作線程檢測到一個新產品時,它就會遍歷這個列表併發送通知給任何需要它的人。 這種方法的問題是,爲了擁有一個全球客戶名單 - 我需要將這項服務作爲一個Singlton,對嗎?
第二種辦法是......呃......我沒有的我如何可以訪問連接到從工作線程該服務的客戶名單另一個想法...
我猜我的主要問題是每個客戶都可能想要通知他不同種類的產品。含義 - pub \ sub方法在這裏不太好,因爲我的場景需要服務來了解客戶端。
我如何能解決這個頭痛有什麼建議?
你有沒有想過使用隊列。您的每個客戶端都連接到隊列並在可用時輪詢數據。簡單的WCF服務就是訂閱數據的服務。然後在您的工作線程中,當數據與它們相關時,將數據推送到客戶端隊列。 – rpgmaker 2012-04-26 03:52:16
隊列將如何完全解決我的問題?你的意思是'wcf服務是訂閱數據的服務'?你有我可以看的樣品或例子嗎? – 2012-04-26 07:19:09
我的回答是低於 – rpgmaker 2012-04-26 19:34:47