C#ConcurrentQueue - 在Enqueue發生時引發事件?
我有一個WCF服務託管在Windows服務中。
WCF服務注入用ConcurrentQueue < SomeClass的>。
Windows服務(託管WCF服務)也被注入與ConcurrentQueue < SomeClass的>。
Windows服務啓動WCF服務,並且還產生一個工作線程。
工作者線程推(排入)SomeClass的的對象到ConccurrentQueue。
我想以某種方式爲WCF服務當一個對象被排入到ConcurrentQueue,使其能夠出列,它(以及任何其他物體,可能是在隊列中),並且將消息發送到所有被觸發連接客戶端。
。
兩個問題:
如何讓我的WCF服務「鉤」上注入ConccurentQueue的「排隊」的方法,這樣,當對象被推進了隊列 - WCF服務會做些什麼呢?
如果我管理以某種方式掛鉤「排隊」事件,現在在Windows服務的工作線程排隊對象到隊列中 - 這意味着它也將「觸發」 WCF服務的「排隊掛鉤「兩次 - 這兩個觸發事件是否會發生在不同的線程中?我需要以某種方式確保WCF服務按順序從隊列中抽取對象。我不想突然看到,對於每一個入隊操作 - 在一個單獨的線程的WCF服務觸發並拉起對象了......
我希望我的問題是不夠清楚......
。
[更新]
與克里斯聊天后,我得出的結論是,走在這一點的最好辦法是單獨從WCF服務的工作線程,使工作線程作爲客戶端調用WCF服務。這意味着我不必在隊列中玩耍。
問題是 - WCF服務具有 'PerSession' 的 'InstanceContextMode'。所以我真的不能通過「ConcurrentQueue」到WCF服務的構造,因爲它要求每個客戶端...所以 - 也許我應該使用,而不是「PerSession」「單」? –
這將解決這個問題,只要你的服務可以作爲一個單獨 – Chris
運行可能是更好的解決方案是,如果Windows服務將只連接到WCF服務的客戶 - 而只是呼籲WCF一個「發佈」方法服務,而不是使用Queue將對象傳遞給服務...不是? –