首页 > 代码库 > wcf事务
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>
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。