我有一个托管在Windows服务中的WCF服务。
WCF服务注入ConcurrentQueue<SomeClass>
。
Windows服务(承载WCF服务)也注入了ConcurrentQueue<SomeClass>
。
Windows服务启动WCF服务,并生成工作线程。
工作线程将Enqueue
的{{1}}对象推送到SomeClass
。
我想以某种方式在一个对象排队到ConccurrentQueue
时触发WCF服务,以便它可以使它(以及可能在队列中的任何其他对象)出列,并发送消息给所有连接的客户。
两个问题:
如何在注入的ConccurentQueue的'Enqueue'方法上进行WCF服务'hook',这样当对象被推入队列时--WCF服务会对它做些什么?
如果我设法以某种方式挂钩'Enqueue'事件,现在Windows服务中的工作线程已将两个对象排入队列 - 这意味着它也会'触发'WCF服务''Enqueue hook'两次 - 这两个触发事件会在不同的线程中发生吗?我需要以某种方式确保WCF服务按顺序从队列中提取对象。我不想突然看到每个Enqueue操作 - WCF服务在一个单独的线程中触发并拉出对象......
我希望我的问题足够清楚......
[更新]
在与Chris聊天之后,我得出的结论是,最好的方法是从WCF服务中分离工作线程,并使工作线程作为客户端调用WCF服务。这意味着我不必使用队列。
答案 0 :(得分:3)
将ConcurrentQueue包装在一个公开Enqueue&amp; amp;出列呼叫,然后将你的钩子放在这个类中。每当调用YourClass.Enqueue时,触发WCF活动,该活动可以调用YourClass.Dequeue。 YourClass.Dequeue将耗尽队列&amp;将它放入一个有序的枚举中,然后WCF服务可以按顺序处理。