wcf事务
wcf服务
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
namespace MyWcfService
{
// 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“IService1”。
[ServiceContract]
public interface IService1
{
[OperationContract]
[TransactionFlow(TransactionFlowOption.Allowed)]
string ExecuteSql(string value);
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
namespace MyWcfService
{
[ServiceBehavior(ReleaseServiceInstanceOnTransactionComplete = false, InstanceContextMode = InstanceContextMode.PerCall)]
public class Service1 : IService1
{
[OperationBehavior(TransactionAutoComplete = true, TransactionScopeRequired = true)]
public string ExecuteSql(string value)
{
SqlHelper sql = new SqlHelper();
return sql.ExecuteNonQuery(value).ToString();//如果是mysql帮助文档中的此方法,会报错,因为mysql数据库不支持分布式事务
}
}
}
宿主serviceHost
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
using MyWcfService;
namespace serviceHost
{
class Program
{
static void Main(string[] args)
{
ServiceHost host = new ServiceHost(typeof(Service1));
host.Open();
Console.WriteLine("open");
Console.ReadKey();
}
}
}
宿主的配置文件
<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.serviceModel> <behaviors> <serviceBehaviors> <behavior name="serviceDebuBehavior"> <!--可以在客户端获取异常--> <serviceDebug includeExceptionDetailInFaults="true" /> </behavior> </serviceBehaviors> </behaviors> <services> <service name="MyWcfService.Service1" behaviorConfiguration="serviceDebuBehavior"> <!--以上异常配置--> <endpoint address="net.tcp://127.0.0.1:3721/calculatorservice" binding="netTcpBinding" contract="MyWcfService.IService1" bindingConfiguration="transactionBinding" /> </service> </services> <bindings> <netTcpBinding> <!--transactionFlow=true 开启事务 必须配置,而且宿主和客户端都要配置--> <binding name="transactionBinding" transactionFlow="true" > <reliableSession enabled="true"/> <security></security> </binding> </netTcpBinding> </bindings> </system.serviceModel> </configuration>
//客户端 调用者ClinetAPP
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
using System.Transactions;
using MyWcfService;
namespace ClinetAPP
{
class Program
{
static void Main(string[] args)
{
ChannelFactory<IService1> channl = new ChannelFactory<IService1>("WcfService");
try
{
IService1 service = channl.CreateChannel();
using (TransactionScope trans = new TransactionScope())
{
string sql1 = "insert into demo values('1','2')";
string sql2 = "update demo set pwd2='2'";
string s1 = service.ExecuteSql(sql1);
string s2 = service.ExecuteSql(sql2);
Console.WriteLine(s1 + s2);
Console.ReadKey();
trans.Complete();//此处提交事务。如果没有执行此方法,事务就会回滚。
}
}
catch (Exception ex)
{
}
}
}
}
//客户端配置文件
<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.serviceModel> <client> <endpoint name="WcfService" address="net.tcp://127.0.0.1:3721/calculatorservice" binding="netTcpBinding" contract="MyWcfService.IService1" bindingConfiguration="transactionBinding"/> </client> <bindings> <netTcpBinding> <binding name="transactionBinding" transactionFlow="true" > <reliableSession enabled="true"/> <security></security> </binding> </netTcpBinding> </bindings> </system.serviceModel> </configuration>
wcf事务的更多相关文章
- WCF入门(十)---WCF事务
事务处理在WCF(Windows Communication Foundation)是一套遵循一些性质,统称为ACID的操作.这里,如果一个操作出现故障,整个系统就会自动失败.如网上订单生成,就可能使 ...
- wcf事务(随记)
----------------------------------------------------wcf事务:1.ACID:原子性.一致性.隔离性.持久性:2.事务:添加命名空间(using S ...
- WCF分布式开发步步为赢(12):WCF事务机制(Transaction)和分布式事务编程
今天我们继续学习WCF分布式开发步步为赢系列的12节:WCF事务机制(Transaction)和分布式事务编程.众所周知,应用系统开发过程中,事务是一个重要的概念.它是保证数据与服务可靠性的重要机制. ...
- WCF事务应用[转]
在B2B的项目中,一般用户注册后,就有一个属于自己的店铺,此时,我们就要插入两张表, User和Shop表. 当然,要么插入成功,要么全失败. 第一步: 首先看一下项目的结构图: 第二步: 准备工作, ...
- WCF学习笔记之事务编程
WCF学习笔记之事务编程 一:WCF事务设置 事务提供一种机制将一个活动涉及的所有操作纳入到一个不可分割的执行单元: WCF通过System.ServiceModel.TransactionFlowA ...
- WCF基础之事务
说到事务,我最先想到的是“回滚”. 百科:事务是恢复和并发控制的基本单位.事务应该具有4个属性:原子性.一致性.隔离性.持久性.这四个属性通常称为ACID特性.好了,具体的就不多复制了. 我小试了一下 ...
- 跟我一起学WCF(13)——WCF系列总结
引言 WCF是微软为了实现SOA的框架,它是对微乳之前多种分布式技术的继承和扩展,这些技术包括Enterprise Service..NET Remoting.XML Web Service.MSMQ ...
- 跟我一起学WCF(10)——WCF中事务处理
一.引言 好久没更新,总感觉自己欠了什么一样的,所以今天迫不及待地来更新了,因为后面还有好几个系列准备些,还有很多东西需要学习总结的.今天就来介绍下WCF对事务的支持. 二.WCF事务详解 2.1 事 ...
- C#综合揭秘——细说事务
引言 其实事务在数据层.服务层.业务逻辑层多处地方都会使用到,在本篇文章将会为大家一一细说. 其中前面四节是事务的基础,后面的三节是事务的重点,对事务有基础的朋友可以跳过前面四节. 文章有错漏的地方欢 ...
随机推荐
- 初学者学习C++的50条忠告
1.把C++当成一门新的语言学习(和C没啥关系!真的.); 2.看<Thinking In C++>,不要看<C++变成死相>; 3.看<The C++ Programm ...
- html DOM 方法和屬性
html利用javascript對節點執行動作: 每一個節點是一個節點對象,對節點的動作是通過方法和屬性接口實現的: 方法:就是執行的動作: 屬性就是節點的屬性(包括設置和獲取): 常見方法和作用: ...
- Fiddler4入门——手机抓包
一.下载工具包 百度搜索”fiddler 下载“ ,安装最新版本 下载的软件安装包为“fiddler_4.6.20171.26113_setup.exe”格式,双击安装.安装成功,在“开始”-“所有程 ...
- BZOJ[Usaco2017 Jan]Promotion Counting——线段树合并
题目描述 The cows have once again tried to form a startup company, failing to remember from past experie ...
- VMware下Mac系统自适应屏幕
1.下载VMwareTool工具镜像 链接:https://pan.baidu.com/s/1gvXBdzrwYyOEl6yhJurUig 提取码:s1po 2.打开Mac系统,推出DVD 2.设置连 ...
- Fantasy of a Summation LightOJ - 1213 (快速幂)
题意: 首先 只看第一层循环的A[0],是不是用了nk-1次 A[1]也是用了nk-1次······ 所以 第一层的sum(A[i]的和) 一共用了nk-1 所以第一层为sum * nk-1 因为又 ...
- Rsync 客户端配置
安装rsync服务yum -y install rsync 创建密码文件rsync.passwordvi /etc/rsync.password只存储密码即可,无需用户名.密码为Rsync服务器端的/ ...
- 变量[^_^][T_T]
变量[^_^][T_T]source .bashrcget_ps1(){if [ "$?" = "0" ]then#we're on the system co ...
- ubuntu 14.04下使用fcitx时将caps lock映射为ctrl
在~/.xprofile中加入 setxkbmap -option caps:ctrl_modifier 要弄成全局的就在 /etc/X11/Xsession.d/ 里面找个文件塞进去. archli ...
- docker的网络模式
记性不好,回顾一下.按照惯例,直接看官文. Docker's networking subsystem is pluggable, using drivers. Several drivers exi ...