Web服务和数据库并发

时间:2008-10-10 21:14:11

标签: database web-services concurrency

我正在构建一个.NET客户端应用程序(C#,WinForms),它使用Web服务与数据库进行交互。客户端将使用WAN或VPN从远程位置运行,因此使用Web服务而不是直接访问数据库。

我现在正在努力解决的问题是如何处理数据库并发。也就是说,如果来自不同位置的两个人更新相同的数据,我该如何处理?我正在考虑在每个数据库记录上使用时间戳,并将其作为更新where子句的一部分,但这意味着时间戳必须在Web服务接口中来回移动,这看起来很难看。

最好的方法是什么?

3 个答案:

答案 0 :(得分:1)

我认为您不希望您的Web服务直接与数据库通信。您可能希望您的服务与某些类型的业务组件进行交互,而这些组件又与数据访问层进行交互。任何并发异常都可以从DAL传递到可以处理它们的业务层,这样Web服务就不必查看时间戳。

但是如果您将类似数据表的内容传递给客户端并且希望避免使用时间戳,则可以通过逐字段比较来进行并发检查。如果要求进行乐观并发检查,表适配器向导默认会生成此类并发检查。

答案 1 :(得分:0)

如果碰撞很少发生,可以手动解决,一个简单的解决方案是添加一个更新触发器,将行的更新前的值复制到审计表。这样最近的写入就是“胜利者”,但是覆盖不会丢失任何数据,管理员可以恢复先前的行状态,甚至可以将它们组合起来。

这种技术有其缺点,并且在频繁覆盖常见的情况下不是一个非常好的解决方案。

答案 2 :(得分:0)

此外,这稍微偏离主题,但使用Web服务并不一定是因为客户端将远程连接到网络。 ASP.NET Web服务是基于XML的,非常详细。如果您的客户端应用程序可以指望始终连接,那么最好不要使用Web服务。