欢迎来到天天文库
浏览记录
ID:43985237
大小:95.07 KB
页数:5页
时间:2019-10-17
《WCF技术剖析之三十一-WCF事务编程[下篇]-WCF技巧-WCF教程》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、WCF技术剖析之三^一:WCF事务编程[下篇]在WCF事务编程模型下,通过服务契约确定事务流转的策略(参阅《上篇》),通过事务绑定实施事务的流转(参阅《屮篇》)。但是,对于事务绑定接收到并成功创建的事务来说,服务操作的执行是否需要自动登记到该事务之屮,以及服务操作采用怎样的提交方式,这就是服务端口己说了算了。止因为如此,WCF通过服务(操作)行为的形式定义事务的登记和提交(完成)方式。一、事务的自动登记(Enlistment)与提交(完成)在OperationBehaviorAttribute特性(其本身是一个操作行为)屮
2、定了两个与事务管理相关的属性:TransactionAutoComplete和TransactionScopeRequiredo1:[Attributeusage(AttributeTargets.Method)]2:publicsealedclassOperationBehmviorAtitiributie:Attribute,IOperationBehavior3:{4://其他成员5:publicboolTransactionScopeRequired{get;set;}6:publicboolTransaction
3、AutoComplete{get;set;}7:}如上而的代码所示,这两个屈性均为布尔类型,它们代表的含义如下:•TransactionScopeRequired:表示相应的操作的整个执行是否自动登记到一个事务中。具体来讲,如果客户端流程成功地流入服务端,并被服务端事务绑定成功接收,将该属性设为True以为着整个操作的执行将自动被纳入到流入的事务之中,服务操作将会成为客户端事务的一部分。如果服务端不曾成功接收流入的事务,将该属性设为True意味着操作的执行将会被纳入到一个新创建的事务中。TransactionScopeRe
4、quired的默认值为False;•TransactionAutoComplete:表示如果操作执彳亍过程中没有抛出异常,完成后将口动提交事务(对于最外层的事务)或者向被依赖的事情进行投票(对于嵌套的依赖事务)。TransactionAutoComplete的默认值为True。如果我们需要将整个操作(而不是操作的一部分)纳入到事务小执行,我们只需要将OperationBehaviorAttribute特性应用到服务类型屮的相应的方法之上,并将TransactionScopeRequired属性设为True即可。相面的代码中
5、,我通过应用OperationBehaviorAttribute特性将服务BankingService的Transfer方法定义成事务型操作方法。1:publicclassBankingService:IBankingService2:{3:[OperationBehavior*(TiransactionScopeRequirod=true)]4:publicvoidTransfer(stringaccountFrom,stringaccountTo,doubleamount)5:{6://省略实现7:}8:}将Trans
6、actionAutoComplete属性设为True(默认就是True)口J以使我们需要考虑对本地事务的提交问题。只要执行完最后一句代码尚无异常抛出,则会提交(或完成)事务。但是有时候,我们需要不同的事务提交(完成)策略,比如服务方法屮包含一些非事务型操作(比如日记记录),只要保证正常的业务逻辑正常执行就可以提交(完成)事务。在这种情况下,我们可以将该属性设为False,通过调用当前OperationContext的SetTransactionComplete方法即可实现对木地事务的提交。1:publicsealedcla
7、ssOperationContext:IExtensibleObject2:{3://其他成员4:publicvoidSetTransactionComplete();5:}除了定义在OperationBehaviorAttribute特性屮的基于操作的行为,述冇一些与事务相关的服务行为,它们定义在我们熟悉的ServiceBehaviorAttribute特性中。二、事务相关的服务行为如下而的代码所示,ServiceBehaviorAttribute特性定义了四个与事务相关的属性。-其中
8、TransactionlsolationLevel指定事务的隔离级别,默认值为IsolationLevel.Serializable;TransactionTimeout以字符串定义事务的超市时限,WCF运行时会根据指定的字符串创建TimeSpan对象;TransactionAutoCompleteOn
此文档下载收益归作者所有