在WCF中启用事务的6个步骤

目录

简介和目标

第1步:创建两个WCF服务小号

第 2 步:使用TransactionFlow的属性接口方法

第 3 步:使用TransactionScopeRequired对实现进行属性

步骤 4:使用WCF服务配置文件启用事务流

第 5 步:在一个事务中调用2个服务

第6步:测试您的事务是否正常工作


简介和目标

在本文中,我们将尝试了解如何在WCF服务中实现事务。因此,我们将创建两个WCF服务来执行数据库事务,然后将它们合并为一个事务。我们将首先了解在WCF服务中启用事务的6个重要步骤。文章最后我们会尝试强制出错,看看出错后事务是如何回滚的。

1步:创建两个WCF服务小号

第一步是创建两个将参与一个事务的WCF服务项目。在这两个WCF服务中,我们将进行数据库事务,并尝试了解WCF事务如何统一它们。我们还创建了一个具有名称的Web应用程序WCFTransactions,它将在一个事务范围内使用这两个服务。

2 步:使用TransactionFlow的属性接口方法

在这两个WCF服务中,我们将创建一个调用UpdateData的方法,该方法 将插入到数据库中。所以,第一件事就是使用ServiceContract属性创建一个接口类和使用OperationContract属性创建一个方法UpdateData。为了在UpdateData方法中启用事务,我们需要使用TransactionFlow属性它,并且我们使用TransactionFlowOption.Allowed enum指定允许该方法使用事务。

[ServiceContract]
public interface IService1
{
[OperationContract]
[TransactionFlow(TransactionFlowOption.Allowed)]
void UpdateData();
}

3 步:使用TransactionScopeRequired对实现进行属性

第三步是使用TransactionScopeRequired作为true来属性WCF服务的实现。下面是代码片段,它具有简单的数据库插入功能,即按TransactionScopeRequired属性进行属性的UpdateData

[OperationBehavior(TransactionScopeRequired = true)]
public void UpdateData()
{
SqlConnection objConnection = new SqlConnection(strConnection);
objConnection.Open();
SqlCommand objCommand = new SqlCommand("insert into Customer
	(CustomerName,CustomerCode) values('sss','sss')",objConnection);
objCommand.ExecuteNonQuery();
objConnection.Close();
}

步骤 4:使用WCF服务配置文件启用事务流

我们还需要通过将transactionFlow属性设置为true来为wsHttpBinding启用事务。

<bindings>
<wsHttpBinding>
<binding name="TransactionalBind" transactionFlow="true"/>
</wsHttpBinding>
</bindings>

我们需要将启用事务的绑定附加到暴露WCF服务的端点。

<endpoint address="" binding="wsHttpBinding" 
	bindingConfiguration="TransactionalBind" contract="WcfService1.IService1">

5 步:在一个事务中调用2个服务

现在我们已经完成了服务器端事务的启用,是时候在1个事务中调用上述2个服务了。我们需要使用该TransactionScope对象将上述2WCF服务分组到一个事务中。要提交所有WCF事务,我们调用Transactionscope对象的Complete方法。要回滚,我们需要调用该Dispose方法。

using (TransactionScope ts = new TransactionScope(TransactionScopeOption.RequiresNew))
{
try
{

// Call your webservice transactions here
ts.Complete();
}
catch (Exception ex)
{
ts.Dispose();
}
}

下面是完整的代码片段,其中我们将两个WCF事务分组在一个作用域内,如下所示:

using (TransactionScope ts = new TransactionScope(TransactionScopeOption.RequiresNew))
{
try
{
ServiceReference1.Service1Client obj = new ServiceReference1.Service1Client();
obj.UpdateData();
ServiceReference2.Service1Client obj1 = new ServiceReference2.Service1Client();
obj1.UpdateData();
ts.Complete();
}
catch (Exception ex)
{
ts.Dispose();
}
}

6步:测试您的事务是否正常工作

是时候测试交易是否真的有效了。我们正在调用两个服务,它们都在执行插入操作。在第一次WCF服务调用之后,我们强制发生异常。换句话说,第一个WCF服务的数据插入应该恢复。如果您检查数据库记录,您将看到WCF服务没有插入任何记录。

6 Steps to Enable Transactions in WCF - CodeProject

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值