【问题标题】:Asynchronous calls with transactions带有事务的异步调用
【发布时间】:2014-01-07 20:58:29
【问题描述】:

我正在编写一个带有异步调用的 WCF 应用程序。这样的调用正在执行一个存储过程(它们是事务[隔离])。

当来自一个用户的存储过程运行,同时另外几个调用到达,存储过程影响相同的数据库表时会发生什么?

我应该实现队列还是 WCF 支持它?

【问题讨论】:

  • 希望在这种情况下发生什么?您可能会使用 SP 中的事务来获得所需的行为。
  • @Servy - 这就是我所做的交易 + SP。我只是担心在此交易执行期间到达的调用将永远不会执行。谁在乎会在每个订单中执行/执行? wcf 中是否有任何队列?或者我作为程序员应该实现这样的队列?
  • 如果您正在拨打电话,他们不会被完全跳过。如果确实如此,那将是某个地方的主要错误。如果您正在使用事务,那么您可以确定它们都会运行,并且会有一些事务的逻辑顺序(尽管您事先不知道该顺序是什么)。这就是交易的

标签: c# sql wcf transactions


【解决方案1】:

这是使用数据库事务的全部要点。它们确保对任何数据库的操作都是原子的。

即使您没有在 .Net 中进行异步调用,如果您有 2 个应用程序同时访问同一个数据库,您也希望每个应用程序的查询都在数据库事务的上下文中完成,因此它们发生孤立和独立于另一个。

.NET 中的 TransactionScope 非常适合这个

using(TransactionScope tran = new TransactionScope()) {
    CallAMethodThatDoesDBWork();

    tran.Complete();
}

如果你的代码有错误,Dispose() 将在没有 Complete() 的情况下被调用,所以它会被回滚。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-14
    • 2013-01-27
    • 1970-01-01
    • 2015-04-18
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多