在 Web 服务调用之间保持事务

本文关键字:事务 之间 调用 Web 服务 | 更新日期: 2023-09-27 18:33:53

我在 4.5.1 ASP.NET 中有一个 webservice (Service.svc.cs)。

我有一个方法叫做"public string UploadData(Guid id, string[] data)"

客户端使用字符串调用此方法,服务器将数据存储在 SQL-Server 数据库中,但不提交或回滚此 DbTransaction。

然后,同一客户端应(例如 5 秒后)调用其他两个方法之一:"提交数据(Guid id)"或"回滚数据(指导 ID)"

根据方法,服务器应提交或回滚事务。如果客户端在 30 秒内未调用,则应回滚事务。

我尝试在调用之间将事务存储在服务器内存中,但事务已损坏。事务中的某些值(如连接)将重置为 null。因此,提交或回滚不起作用。

在 Web 服务调用之间保留 System.Data.Common.DbTransaction 的最佳方法是什么?

在 Web 服务调用之间保持事务

一种方法是,

  1. [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]属性设置为服务类
  2. 创建类TransactionData { DbTransaction, StartDate }
  3. 创建static字典,IDictionary<GUID, TransactionData> transactions;
  4. 当用户调用第一个方法时,使用一些新创建的 guid 将事务存储到此字典中,并将 guid 返回给用户
  5. 在其他调用中,用户将此 guid 发送到服务器,检查事务是否存在提交或回滚
  6. 创建一个单独的线程,或者在每次用户调用时,检查并回滚/清除旧事务的字典......

您可以尝试使用会话,而不是字典...无论如何,如果您在IIS下托管,除了外部存储之外,几乎没有其他方法可以保留持久性数据...但这可以适用于您的情况