这篇文章与我的这篇文章有些相关: 如何在 WCF 服务中同步数据库访问?
我得到的回答过于复杂和\或矛盾...... :(
我创建了一个示例 WCF 服务,并针对它运行了 3 个客户端实例。该服务与一个名为名称的 SQL 表进行通信,该表有几行。
一个客户端在服务中生成函数 1。
第二个客户端在服务中生成函数 2。
function1在服务上生成一个函数:
一个。将特定行从“Charlie”更改为“Chin”
湾。等待 5 秒
C。再次将行从“Chin”更改为“Carol”
function2生成一个返回所有名称列表的函数。
需要注意的是,服务中的两个函数都用“TransactionScope”包装。
我做什么:我运行function1(将'Charlie'更改为'Chin'并等待5秒),然后立即生成function2,它试图获取名称列表但挂起(因为function1尚未完成),并且几秒钟后,function1将名称从“Chin”更改为“Carol”,然后才释放function2并返回名称列表。
事情是 - 从function2返回的名称列表不包含 'Carol' !它包含“查理”!为什么是这样 ?我认为因为function2挂起直到function1完成 - 它也只会在function1完成时获取数据,但显然情况并非如此。
我究竟做错了什么 ?
我不想开始使用锁,因为这会减慢整个系统的速度。在我的最终服务中,我将有大约 20 种方法,我不希望所有方法都必须使用锁......(只有 3-4 种方法用于“阅读”,但它们将被使用 95 % 的时间)...