Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Published by Scroll Versions from space FUNCTDEV and version SVC2020.2

...

Table of Contents
maxLevel1

SOAtest と .NET WCF のフローされたトランザクション

SOAtest は WS-Atomic Transactions プロトコルおよび MS OLE Transactions プロトコルを使用して、フローされたトランザクションを開始できます。  フローされたトランザクションを使用できるのは、サービス エンドポイントのバインディング構成に transactionFlow="true" と、 transactionProtocol="OleTransactions" または transactionProtocol="WSAtomicTransactionOctober2004" のどちらかがある場合です。

...

上記の MSDN の「WS トランザクション フロー」では、フローされたトランザクションを開始するよう Web サービス クライアントを構成するために必要な条件が説明されています。SOAtest でトランザクションを構成するのに必要な手順も、この項目の説明と似ています。まず、WCF のトランザクションの背景となる基本的なコンセプトを理解するため、「WS トランザクション フロー」を読むことを強く推奨します。

MSDTC の構成

SOAtestを実行するマシンおよび Web サービスをホストするマシンで Microsoft Distributed Transaction Coordinator (MSDTC) を正しく構成する必要があります。MSDN の 「WS トランザクション フロー」に、MSDTC の構成手順および Windows のファイアウォールで DTC を許可する方法が記載されています。その他、MSDTC の構成に役立つ可能性のある項目として、以下が挙げられます。

テストスイートの構成

複数の Web サービスの操作を 1 つのトランザクション スコープ内で呼び出すには、TransactionScope オブジェクトを構成する必要があります。次の C# のコードを例とします。

...

WcfUtil および対応する .NET API については以下で説明します。

int webtool.soap.wcf.WcfUtil.createTransactionScope(int scopeOption, int isolationLevel, int scopeTimeout)

パラメーター

scopeOption

  • 参照: TransactionScopeOption 列挙体:  http://msdn.microsoft.com/en-us/library/system.transactions.transactionscopeoption.aspx

  • 以下のいずれかを使用できます:

    • WcfUtil.TRANSACTION_SCOPE_OPTION_REQUIRED
    • WcfUtil.TRANSACTION_SCOPE_OPTION_REQUIRES_NEW
    • WcfUtil.TRANSACTION_SCOPE_OPTION_SUPPRESS

...

  • TransactionScope のタイムアウト時間 (単位: ミリ秒) です。

戻り値

TransactionScope の参照に使用できる ID です。

String WcfUtil.getCurrentPropagationToken()

戻り値

Base64 エンコーディングされた現在のトランザクションのプロパゲーション トークンです。

WcfUtil.completeTransactionScope(int transactionScopeRef)

パラメーター

transactionScopeRef

  • WcfUtil.createTransactionScope() から返される ID です。

トランザクション ヘッダーの構成

各ツールには、プロパゲーション トークンを含む SOAP ヘッダーが必要です。このプロパゲーション トークンは、前に説明した最初の Extension Tool テストに連結された XML Data Bank から取得されます。必要な SOAP ヘッダーのタイプは、トランザクション プロトコルによって異なります。 

OleTransaction ヘッダー

OleTransaction の場合、OleTxTransaction SOAP ヘッダーが必要です。  参考までに、次に OleTxTransaction SOAP ヘッダーのサンプルを示します。

...

  1. ツールの [リクエスト] タブで [SOAP ヘッダー] タブを選択します。



  2. [SOAP ヘッダー] タブで [追加] ボタンをクリックします。[新規 SOAP ヘッダーの追加] ダイアログが表示されます。



  3. [新規 SOAP ヘッダーの追加] ダイアログで [カスタム] を選択し、[OK] ボタンをクリックします。[SOAP ヘッダー] タブに新しい行が追加されます。
  4. [SOAP ヘッダー] タブで新しい行をダブルクリックします。[編集] ダイアログが表示されます。



  5. 次のサンプル SOAP ヘッダーを [編集] ダイアログのリテラル/XML テキスト フィールドに貼り付けます。

    Code Block
    <OleTxTransaction b:Expires="59904" s:mustUnderstand="1"
       xmlns="http://schemas.microsoft.com/ws/2006/02/tx/oletx"
       xmlns:b="http://schemas.xmlsoap.org/ws/2004/10/wscoor" 
       xmlns:s="http://www.w3.org/2003/05/soap-envelope">
       <PropagationToken></PropagationToken>
    </OleTxTransaction>
  6. [編集]ダイアログの [ビュー] ドロップ ダウンから [フォーム XML] を選択し、[はい] をクリックしてリテラル XML 値でフォーム XML の値を上書きます。
  7. フォーム XML ビューで PropagationToken 要素を選択し、要素値に対して [パラメータライズ] オプションを選択します。これによって、プロパゲーション トークンを格納した XML Data Bank を選択できるようになります。
  8. [OK] ボタンをクリックします。

WS-Atomic Transaction ヘッダー

WS-Atomic Transaction の場合は、CoordinationContext SOAP ヘッダーが必要です。OleTxTransaction ヘッダーの場合と同様に、PropagationToken 要素をパラメータライズして XML Data Bank のプロパゲーション トークンを含める必要があります。参考までに、次に CoordinationContext SOAP ヘッダーのサンプルを示します。

...