【发布时间】:2012-04-17 17:23:52
【问题描述】:
这篇文章与我的这篇文章有些相关: How to synchronize database access in a WCF Service?
我得到的回答过于复杂和\或矛盾... :(
我创建了一个示例 WCF 服务,并针对它运行了 3 个客户端实例。 该服务与一个名为 names 的 SQL 表进行通信,该表有几行。
一个客户端在服务中生成函数 1。
第二个客户端在服务中产生函数2。
function1 在服务上生成一个函数:
一个。将特定行从“Charlie”更改为“Chin”
b.等待 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% 的时间内使用)...
【问题讨论】:
标签: wcf transactionscope