wcf事务

wcf中的可靠性特性

   分布式,面向服务的系统依赖于:

        访问远程应用程序的功能

        功能执行的可预测性

        系统可用性与一致性

        网络连接

  WCF提供了可靠性特性

     可靠性回话

     事务支持

     可持久划的消息队列

 

WCF事务

    在绑定上开启事务流

    必须选择事务协议

     指定支持事务的服务操作

     服务操作必须显示地指明加入现有的事务或者创建新的事务

绑定支持

      许多绑定都支持跨服务边界的事务流

       NetNamedPipeBinding

       NetTcpBinding

       WSHttpBinding

       WSDualHttpBinding

       WSFederationHttpBinding

     每个绑定缺省与特性的传输协议相关

打开事务流

   事务流缺省是关闭的

   在配置文件中为绑定打开支持事务的特性

   使得客户端可以将事务流动到服务端

   <WSHttpBinding>
        <binding name="WSHttp" transationFlow="true"/>
   </WSHttpBinding>

事务流动选项

      在服务契约中,为服务操作应用,TransanctionFlowAttribute

       设置TransanctionFlowOptionto

                NotAllowed,此操作不使用事务,不会加入到客户端的上下文环境之中

                Mandatory,操作加入到客户端的事务上下文环境之中

                Allowed,客户端有事务的上下文环境则加入,没有则自己创建一个新事务

       控制服务端是否允许或者要求使用客户端的事务

          

[operationContract]
[TransactionFlow(TransactionFlowOption.Allowed)]
void ResetCounters();

服务操作

       OprationBehaviorAttribute

       TransactionScopeRequired属性

               当需要加入到客户端事务或者操作在被调用是需要创建新的事务的时候,将其设置为true

               设置为false(缺省)不做任何事情

       TransactionAutoComplete属性

               设置为true时,自动投提交票

                当抛出异常时,投终止票

        

[OperationBehavior(TransactionScopeRequired=true,TransactionAutoComplete=true)]
public void ResetCounters()


客户端配置

      对于客户端的事务流传播:

            在绑定上打开事务流

             具有要传播的事务

              在代理的服务契约上,事务流选项被设置为Mandatory或者Allowed

事务协议选项

        WCF支持多种事务协议

         OleTransaction:跨进程与网络边界

          WSAtomocTransanction11:在HTTP上跨服务边界

传输协议选项

        NetTcpBinding  and NetNamedPipeBinding支持可配置的事务协议

        

<netTcpBinding>
    <binding name="netTcp" transactionFlow="true" transactionProtocol="WSActionTransaction11"
</netTcpBinding>

         

     当服务上下文环境为percall是按照上面的设置,当服务上下文环境为persession时

     [Servicebehavior(InstanceContextMode=InstanceContextMode.Persession,TransactionAutocomplateOnSessionClose=true)]
                  每一个操作上的TransactionAutoComplete=false

事务超时

        事务的缺省超时为60秒

        可以在配置文件中控制

    

<behaviors>
       <serviceBehaviors>
            <servicemetadata httpGetEnable=“true"/>
              <serviceTimeouts transactionTimeout="00:00:01"
        </servicebehaviors>
</behaviors>

     也可以在代码中控制,加在servicebehavior上 TransactionTimeout="00:00:01"

控制隔离级别

      IsolationLevel枚举

             Chaos,ReadCommitted,ReadUncommitte,RepeatableRead,Serializable,Snapshot,Unspecified

     缺省情况下,服务计入到客户端的隔离级别中

需要权衡并发性的效率和隔离级别

 

 

              

 

你可能感兴趣的:(wcf事务)