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

时间:2016-02-09 10:04:30

标签: c# asp.net web-services transactions

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

我有一个叫做的方法 "公共字符串UploadData(Guid id,string [] data)"

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

然后,同一客户端(例如5秒钟后)应调用另外两种方法之一: " CommitData(Guid id)"要么 " RollbackData(Guid id)"

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

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

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

1 个答案:

答案 0 :(得分:0)

一种方法是,

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