码迷,mamicode.com
首页 > 其他好文 > 详细

wcf事务

时间:2014-06-18 19:06:34      阅读:222      评论:0      收藏:0      [点我收藏+]

标签:class   blog   ext   com   使用   文件   

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事务,布布扣,bubuko.com

wcf事务

标签:class   blog   ext   com   使用   文件   

原文地址:http://www.cnblogs.com/wlzhang/p/3790686.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!