目录

简介和目标

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

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

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

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

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

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


  • 下载源代码 - 66.01 KB

简介和目标

在本文中,我们将尝试了解如何在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对象将上述2个WCF服务分组到一个事务中。要提交所有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

在WCF中启用事务的6个步骤相关推荐

  1. springBoot中启用事务管理

    https://blog.csdn.net/shenzhennba/article/details/80851080

  2. 如何在Safari Mac中启用暗黑模式?

    长时间在Safari浏览器上的在线时间会使您感到疲倦或使您的眼睛更加疲劳.而且,如果您在黑暗中或夜晚浏览互联网,则可能会伤害您的眼睛并可能导致黑眼圈.但是,如果您降低亮度并在Safari浏览器中启用暗 ...

  3. 在WCF中实现双工通信(转载)

    首先声明此文章是转载博客园蒋老师之作:http://www.cnblogs.com/artech/archive/2007/03/02/661969.html 双工(Duplex)模式的消息交互方式体 ...

  4. mysql中不同事务隔离级别下数据的显示效果--转载

    事务是一组原子性的SQL查询语句,也可以被看做一个工作单元.如果数据库引擎能够成功地对数据库应用所有的查询语句,它就会执行所有查询,如果任何一条查询语句因为崩溃或其他原因而无法执行,那么所有的语句就都 ...

  5. MySql中启用InnoDB数据引擎的方法

    1.存储引擎是什么? Mysql中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不同的功能和能力.通过选择不同的技术, ...

  6. 用 JOTM 向Servlet中添加事务

    J2EE 除了提供了 servlet 之外,还提供了大量的其它功能.Servlet 开发者们也许难得使用这些功能,不情愿也没有时间用一个超出所需的大型 J2EE 服务器来替换自己的简单的 servle ...

  7. Microsoft SQL Server中的事务(转载)

    1.1 事务的概念 事务是作为单个工作单元而执行的一系列操作,比如查询和修改数据等. 事务是数据库并发控制的基本单位,一条或者一组语句要么全部成功,对数据库中的某些数据成功修改; 要么全部不成功,数据 ...

  8. 深入sql server中的事务

    一. 概述... 1 二. 并发访问的不利影响... 1 1. 脏读(dirty read)... 1 2. 不可重复读(nonrepeatable read)... 1 3. 幻读(phantom ...

  9. WCF中绑定的简单介绍

    绑定基本概念 绑定就是一个从通用基础类型派生出来的运行时类型.绑定中描述了传输协议,消息编码格式和其他的一些用于通信的通信协议. 绑定的种类介绍 类型名 配置文件使用名 描述 BasicHttpBin ...

最新文章

  1. apache修改最大连接并用ab网站压力测试
  2. javascript调试工具
  3. 用Mina xscocket 通讯框架做(Flex)服务端
  4. android 使用wps打开的xls没有刷新_Excel文件打开都变成了WPS,如何改回微软Excel
  5. 属于web框架的python库_(2017)我不建议使用的Python Web框架
  6. 安卓网络编程(Socket、WebView控件)
  7. avue里面的select怎么设置默认值_mysql大量的waiting for table level lock怎么办
  8. ASP.NET MVC实践系列1-UrlRouting
  9. 随想录(windows静态库和动态库)
  10. 类似GoogleMap地图网站的简单实现(1)
  11. 1 Vue的基础语法
  12. 千月影视APP前端搭建_②_创建APP应用
  13. html记事本制作静态网页,记事本编辑html静态网页设计(3页)-原创力文档
  14. 如何在linux上运行asp网站,linux上搭建asp网站
  15. Audacious实现cue、ape音乐支持,GBK支持、cue乱码完美解决
  16. 在 M1/M2 芯片的Mac上安装最新原生 ruby 的超简单方法(无需rvm)
  17. 关于高通平台下camera一些参数的设置
  18. 记2020年(第16届)湖南ACM省赛
  19. 前端基础——CSS布局
  20. 分布式事务——seata简单使用

热门文章

  1. pycharm安装javascript插件_IDEA必备插件系列-Rainbow
  2. android webserver mysql,Android手机变身Web服务器,BitWebServer简单评测
  3. python模块调用的用法_python模块怎么使用
  4. mysql中like与rlike_MySQL中RLIKE运算符的使用详解-mysql教程-
  5. java 构造器 null_java - 主结尾处的Java构造函数用户输入在构造函数中为Null - 堆栈内存溢出...
  6. 手机展示海报PSD模板、适用众多设计!
  7. 智慧城市发展未来PSD分层海报模板|科技突破你的想象!
  8. 强迫症设计师最爱的对称构图,促销模板
  9. java代码修改数据库里图片_java如何修改sql存储的图片?
  10. python如何写二进制乘法_使用python写乘法口诀表