在 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 的最佳方法是什么?
一种方法是,
- 将
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
属性设置为服务类 - 创建类
TransactionData { DbTransaction, StartDate }
- 创建
static
字典,IDictionary<GUID, TransactionData> transactions;
- 当用户调用第一个方法时,使用一些新创建的 guid 将事务存储到此字典中,并将 guid 返回给用户
- 在其他调用中,用户将此 guid 发送到服务器,检查事务是否存在提交或回滚
- 创建一个单独的线程,或者在每次用户调用时,检查并回滚/清除旧事务的字典......
您可以尝试使用会话,而不是字典...无论如何,如果您在IIS下托管,除了外部存储之外,几乎没有其他方法可以保留持久性数据...但这可以适用于您的情况