首先讲解一下事务的几个很重要的性质。
Code
WCF 对分布事务提供了良好的支持,这使得我们可以协调多个服务之间的数据完整性。通过 TransactionFlowAttribute、ServiceBehaviorAttribute 和 OperationBehaviorAttribute 这三个特性,我们可以很好地控制事务的相关细节。
TransactionFlowAttribute 的构造参数 "TransactionFlowOption transactions" 允许我们在强制事务(Mandatory)、允许参与事务(Allowed)和禁止事务(NotAllowed)间进行选择。
ServiceBehaviorAttribute 提供了多个属性参与事务控制。TransactionAutoCompleteOnSessionClose 指示当会话(Session)结束时是否自动提交事务(Complete); ReleaseServiceInstanceOnTransactionComplete 指示事务提交后是否释放服务实例对象; TransactionIsolationLevel 用于设置事务隔离方式(isolation level); TransactionTimeout 用于设置事务超时时间。
OperationBehaviorAttribute 的 TransactionScopeRequired 属性是 WCF 分布事务所必需使用的,它表明服务方法必须在事务范围(transaction scope)内执行。如果不添加该标记,则意味着服务方法不参与到事务中。TransactionAutoComplete 指示方法正常结束后自动提交事务。
采用WShttp形式。采用添加服务引用的方式。
1 在服务器端配置文件中,要加下如下代码。 放在 <system.serviceModel>里面
Code
<bindings>
<wsHttpBinding>
<binding name="MyBinding" transactionFlow="True" />
</wsHttpBinding>
</bindings>
2 使用上面新增的BINDINGS
Code
<endpoint address="" binding="wsHttpBinding" bindingConfiguration="MyBinding" contract="Interface.IService" >
3 在接口的方法上面加上如下属性
Code
[TransactionFlow(TransactionFlowOption.Mandatory)]
4 在实现接口类上面加上如下属性
Code
[OperationBehavior(TransactionScopeRequired=true)]
5 接下来就是客户端的调用了。
Code
using (TransactionScope scope = new TransactionScope())
{
ServiceClient over = new ServiceClient();
Data.Computer p =over.GetComputer();
Console.WriteLine(p.ComputerName);
Console.Read();
scope.Complete();
}
至此。 一个WCF的事务就完成了。