【发布时间】:2012-02-06 18:58:13
【问题描述】:
我正在创建一个具有NetTcpBinding 服务和BasicHttpBinding 服务的应用程序。
通过这些服务,客户端向应用程序发送请求:这些请求必须放入一个Queue 对象,即入站请求队列。
- 两个服务都必须允许来自客户端的并发调用。
- 这意味着两个服务应该同时访问队列以添加接收到的请求。
- 此外,另一个线程必须访问队列才能获取和处理请求。
我可以使用ConcurrencyMode.Multiple,可以同时接听很多电话。但是,这并不能保证对队列的并发访问。我应该将两个ServiceHost 放在两个不同的线程中吗?例如:
- 第一个线程出列并处理队列中的请求。
- 第二个线程实例化
NetTcpBinding服务并将新请求排入队列。此外,它通过回调发送任何回复。 - 第三个线程实例化
BasicHttpBinding服务并将新请求排入队列。
这是我的想法。 由于我几乎是新手,如果您能给我一些建议,我将不胜感激。 也许我应该开始编写三个线程同时访问队列:目前前两个线程可能会将随机请求排入队列,而第三个线程消耗这些请求。
【问题讨论】:
-
你绑定到队列了吗?你可以使用 ConcurrentQueue 或 BlockingCollection 吗?这是一个非常标准的生产者/消费者问题。
-
@Joe:现在我应该使用非线程安全的集合,比如
Queue、Dictionary,等等。 -
有什么特别的原因吗?您很可能只是在重新实现轮子。
-
@Joe:学习如何在 C# 中管理线程的唯一教育原因。稍后我将不得不使用线程安全集合来修改这个应用程序。