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