【发布时间】:2012-04-15 22:07:29
【问题描述】:
我以前使用过 WCF 服务,现在我有一个新项目即将推出。 我仍处于设计阶段,我想知道处理以下场景的最佳方法是什么。
我将有多个客户端同时连接到我的 WCF 服务,在服务上触发不同的方法(操作合同):
A. 一些触发的方法只是纯粹的“读取”方法(例如 GetListOfCustomers)。
B. 触发的一些方法是复杂的“读取”方法(例如 GetAllProductsByCustomerId)。 这些方法需要从数据库中获取客户, 检查他的东西,然后得到他购买的所有产品。 (意思是,在这个方法中有 2 次对数据库的调用)。
C.有些是“Write”方法(例如“RemoveCustomer”或“SetProductOutOfStock”)。
我的问题是 - 如何同步所有这些调用,以免出现并发问题?
我不希望整个服务串行处理调用,因为这会损害客户端的性能(某些调用可能需要 3-4 秒才能处理)。 那么我的解决方案是什么?
为所有具有“多个”线程的客户端使用“单个”实例,然后使用锁定对象?这不会导致连续吗?
或者我是否需要一个不同的“读”锁定对象和一个不同的“写”锁定对象?
或者我是否需要为“写”功能加锁而为“读”功能加锁?
这是我在 StackOverflow 上的第一个问题。 感谢任何可以提供帮助的人!
更新:我将使用“Linq-To-SQL”作为我的 ORM。
【问题讨论】:
-
请考虑将其中一个答案标记为已接受。
标签: database wcf concurrency