gpt4 book ai didi

c# - 关于 WCF 服务的简单查询

转载 作者:行者123 更新时间:2023-11-30 22:48:49 24 4
gpt4 key购买 nike

我有一个公开了两个方法的 WCF 服务:

注意:wcf服务和sql server部署在同一台机器上。Sql Server有一张员工表,用来维护员工信息。

  1. Read() 此方法从 sql server 中检索所有员工。
  2. Write() 此方法将员工表中的员工信息写入(添加、更新、删除)到sql server。

现在我开发了一个基于桌面的应用程序,任何客户端都可以通过它使用 Web 服务来查询、添加、更新和删除员工信息。

问题:

如果多个客户端同时更新员工信息,我该如何处理? sql server 本身是通过使用数据库锁来处理这个问题的吗??

请给我建议最好的方法!!

最佳答案

通常,在断开连接的环境中optimistic concurrency使用 rowversion/timestamp 是首选方法。 WCF 确实 支持分布式事务,但这是在系统中引入冗长阻塞的好方法。大多数 ORM 工具都支持开箱即用的 rowversion/timestamp

当然,在服务器,您可能希望使用事务(基于连接或TransactionScope)来使各个存储库方法“ACID”,但我会尝试尽可能避免线上交易。


重新评论;抱歉,老实说我没有看到那些评论;如果您一次收到很多评论,有时 stackoverflow 不会让这变得容易。这里有两个不同的概念;等待是阻塞的表现,但如果您有 100 个客户端更新同一条记录,则在每个事务期间阻塞是完全合适的。为简单起见:除非我能证明存在瓶颈(需要额外的工作),否则我会从围绕更新操作的可序列化事务开始(TransactionScope 默认使用它)。这样是的:对于大多数情况,您会得到适当的阻塞(ACID 等)。

但是;第二个问题是并发性:如果同一条记录有 100 个更新,您怎么知道该信任哪个?大多数系统将让第一个更新,并丢弃其余的,因为它们基于对数据的陈旧假设进行操作。这就是时间戳/行版本的用武之地。通过在 UPDATE 语句上强制执行“时间戳/行版本必须匹配”,您可以确保人们只能更新自拍摄快照以来未更改的数据。为此,通常将 rowversion 与您正在更新的任何有趣数据放在一起。

关于c# - 关于 WCF 服务的简单查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1469873/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com