ServiceModel トランザクションの構成
Windows Communication Foundation (WCF) には、サービスのトランザクションを構成するための 3 つの属性、transactionFlow
、transactionProtocol
、および 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 プロパティの小さい方の値になります。