我有一个WCF服务,它有两个方法暴露:

注:Wcf服务和sql服务器被部署在同一台机器。Sql服务器都有一个表叫雇员维护雇员的信息。

  1. Read()这种方法检索所有雇员从sql服务器。
  2. Write()这种方法将写入(增加、更新、删除)的雇员的信息在的雇员表到sql服务器。

现在我已经开发了一个基于桌面应用程序,通过它的任何客户能够查询、增加、修改和删除的雇员信息,通过消耗网服务。

问题:

我可以如何处理这种情况下,如果多的客户想要更新雇员的信息,在同一时间?是的sql服务器本身的处理这个通过使用数据库锁??

请给我建议最好办法!!

有帮助吗?

解决方案

一般来说,在断开的环境 乐观的并发rowversion/timestamp 是的首选方法。WCF 支持分布式交易,但这是一个伟大的方式引入冗长的阻断进入该系统。大多数对象的工具将支持 rowversion/timestamp 出来的。

当然,在本 服务器 你可能需要使用交易(无论是基于连接或 TransactionScope)作出个人储存库的方法"酸",但我会尽量避免交易丝尽可能的。


重新评论意见;抱歉,老实说,我没有看到这些评论意见;有时候计算器不会使这个简单的如果你得到了很多意见一次。有两个不同的概念在这里;等待是一种症状的阻止,但是如果你有100个客户更新记录相同,它是完全适当的框期间的每一笔交易。让事情变得简单:除非我能证明一个瓶颈(需要额外的工作),我将开始一个 序列化 交易周围的更新的行动(TransactionScope 使用这种通过默认)。这种方式是:你得到适当的阻塞(酸等)对于大多数的情况。

然而;第二个问题是并发:如果你得到100更新用于同样的记录,你怎么知道哪来的信任?大多数系统会让我们的 第一 更新,并放弃其余的,因为他们是工作上的陈旧假设有关的数据。这是时间戳/行版本。通过强制执行"时间戳/行版本必须与"在更新声明,确保人民只能更新数据并没有改变,因为他们把自己的快照。为此目的,它是共同保持行版本一起的任何 有趣的 数据更新。

其他提示

另一个替代方案是,你可以化WCF服务作为一个单独的(InstanceContext.单),这意味着只有一个实例的运行。然后,你可以让一个简单的对象中存储器为目的的更新锁,锁定在更新方法的基础上,对象。当更新电话打进来自其他会议,他们将必须等待,直到的锁被释放。

问候, 史蒂夫

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top