ServiceModel トランザクションの構成

Windows Communication Foundation (WCF) には、サービスのトランザクションを構成するための 3 つの属性、transactionFlowtransactionProtocol、および transactionTimeout が用意されています。

transactionFlow の構成

WCF に用意されているほとんどの定義済みバインディングには、transactionFlow 属性と transactionProtocol 属性が含まれています。これらの属性を使用すると、特定のトランザクション フロー プロトコルを使用する特定のエンドポイントの受信トランザクションを受け入れるようにバインディングを構成できます。 さらに、transactionFlow 要素とその transactionProtocol 属性を使用して、ユーザー独自のカスタム バインドを構築できます。 構成要素の設定の詳細については、<binding> および「WCF Configuration Schema」を参照してください。

transactionFlow 属性は、バインディングを使用するサービス エンドポイントに対してトランザクション フローを有効にするかどうかを指定します。

transactionProtocol の構成

transactionProtocol 属性は、バインディングを使用するサービス エンドポイントで使用されるトランザクション プロトコルを指定します。

以下に、指定したバインディングがトランザクション フローをサポートし、WS-AtomicTransaction プロトコルを使用するように構成する構成セクションの例を示します。

<netNamedPipeBinding>  
   <binding name="test"  
      closeTimeout="00:00:10"  
      openTimeout="00:00:20"
      receiveTimeout="00:00:30"  
      sendTimeout="00:00:40"  
      transactionFlow="true"  
      transactionProtocol="WSAtomicTransactionOctober2004"  
      hostNameComparisonMode="WeakWildcard"  
      maxBufferSize="1001"  
      maxConnections="123"
      maxReceivedMessageSize="1000">  
   </binding>  
</netNamedPipeBinding>  

transactionTimeout の構成

構成ファイルの behavior 要素内で transactionTimeout 属性を WCF サービス用に構成できます。 次のコードでは、この設定方法について説明します。

<configuration>  
   <system.serviceModel>  
      <behaviors>  
         <behavior name="NewBehavior" transactionTimeout="00:01:00" /> <!-- 1 minute timeout -->  
      </behaviors>  
   </system.serviceModel>  
</configuration>  

transactionTimeout 属性は、サービスで作成された新しいトランザクションを完了させる期間を指定します。 この属性は、新しいトランザクションを確立するすべての操作の TransactionScope タイムアウトとして使用され、OperationBehaviorAttribute が適用されている場合、TransactionScopeRequired プロパティは true に設定されます。

このタイムアウトは、2 フェーズ コミット プロトコルにおける、トランザクションの作成からフェーズ 1 の完了までの期間を指定します。

この属性を service 構成セクション内に設定する場合は、対応するサービスの 1 つ以上のメソッドで、OperationBehaviorAttribute プロパティが TransactionScopeRequired に設定された true を適用する必要があります。

使用されるタイムアウト値は常に、この transactionTimeout 構成設定と TransactionTimeout プロパティの小さい方の値になります。

関連項目