次の方法で共有


接続およびセッションの管理 (XMLA)

状態保持とは、複数のメソッド呼び出しの間で、サーバーがクライアントの ID およびコンテキストを保持している状況のことです。状態を保持しないとは、1 つのメソッド呼び出しが終了した後に、サーバーがクライアントの ID およびコンテキストを保持しない状況のことです。

状態を保持するために、XML for Analysis (XMLA) では一連のステートメントをまとめて実行するためのセッションをサポートしています。そのような一連のステートメントの例としては、後続のクエリで使用するための計算されるメンバの作成があります。

一般に、XMLA のセッションは、OLE DB 2.6 の仕様で概説されている以下の動作に従います。

  • セッションはトランザクションとコマンド コンテキストのスコープを定義します。

  • 複数のコマンドを単一のセッションのコンテキストで実行できます。

  • XMLA のコンテキストにおけるトランザクションのサポートは、Execute メソッドによって送信されるプロバイダ固有のコマンドによって行われます。

XMLA は、Distributed Authoring and Versioning (DAV) プロトコルが疎結合環境でロックを実装するために使用しているアプローチと同様の手法で、Web 環境のセッションをサポートする方法を定義します。この実装は、プロバイダがさまざまな理由 (たとえば、タイムアウトや接続エラーなど) でセッションの有効期限を終了させることができるという点で、DAV と類似しています。セッションがサポートされる場合、Web サービスは、中断されて再開が必要なコマンドのセットを認識し、処理する準備を整えている必要があります。

World Wide Web Consortium (W3C) による Simple Object Access Protocol (SOAP) 仕様は、新しいプロトコルを作成するには SOAP メッセージの先頭に SOAP ヘッダーを使用することを推奨しています。次の表は、XMLA がセッションの開始、維持、終了のために定義する SOAP ヘッダー要素と属性の一覧を示しています。

SOAP ヘッダー

説明

BeginSession

プロバイダに新しいセッションの作成を要求します。プロバイダは、新しいセッションを作成し、SOAP 応答の Session ヘッダーの一部としてセッション ID を返すことによって応答します。

SessionId

値域には、セッションの残りの部分での各メソッド呼び出しで使用する必要のあるセッション ID が含まれます。プロバイダは SOAP 応答の中でこのタグを送信します。クライアントも、Session ヘッダー要素ごとに、この属性を送信する必要があります。

Session

このヘッダーは、セッションで生じるメソッド呼び出しごとに使用する必要があります。値域にはセッション ID が含まれている必要があります。

EndSession

セッションを終了するには、このヘッダーを使用します。セッション ID がこの値域に含まれている必要があります。

注意注意

セッション ID は、そのセッションが引き続き有効であることを保証するものではありません。セッションの有効期限が切れた場合 (たとえば、タイムアウトが生じた場合や、接続が失われた場合など)、プロバイダはそのセッションのアクションを終了してロールバックすることができます。その結果、同じセッション ID でのクライアントからの後続のメソッド呼び出しはすべて、セッションが有効でないことを示すエラーによって失敗します。クライアントは、この状況に対処し、そのセッションのメソッド呼び出しを最初から再送信するよう準備する必要があります。

レガシ コードの例

以下の例は、セッションがどのようにサポートされるかを示しています。

  1. セッションを開始するには、クライアントからのアウトバウンド XMLA メソッド呼び出しに SOAP の BeginSession ヘッダーを追加します。セッション ID がまだ不明なため、値域が最初は空白になっています。

    <SOAP-ENV:Envelope
       xmlns:SOAP-ENV="https://schemas.xmlsoap.org/soap/envelope/"
       SOAP-ENV:encodingStyle="https://schemas.xmlsoap.org/soap/encoding/">
       <SOAP-ENV:Header>
          <XA:BeginSession
             xmlns:XA="urn:schemas-microsoft-com:xml-analysis"
             xsi:type="xsd:int"
             mustUnderstand="1"/>
       </SOAP-ENV:Header>
       <SOAP-ENV:Body>
          ...<!-- Discover or Execute call goes here.-->
       </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    
  2. プロバイダからの SOAP 応答メッセージには、XMLA ヘッダーのタグ <SessionId> を使用して、ヘッダー領域にセッション ID が含まれています。

    <SOAP-ENV:Header>
       <XA:Session
          xmlns:XA="urn:schemas-microsoft-com:xml-analysis"
          SessionId="581"/>
    </SOAP-ENV:Header>
    
  3. セッションのメソッド呼び出しごとに、プロバイダから返されたセッション ID を含む Session ヘッダーを追加する必要があります。

    <SOAP-ENV:Header>
       <XA:Session
          xmlns:XA="urn:schemas-microsoft-com:xml-analysis"
          mustUnderstand="1"
          SessionId="581"/>
    </SOAP-ENV:Header>
    
  4. セッションの完了時に、関連するセッション ID 値を含んだ <EndSession> タグが使用されます。

    <SOAP-ENV:Header>
       <XA:EndSession
          xmlns:XA="urn:schemas-microsoft-com:xml-analysis"
          xsi:type="xsd:int"
          mustUnderstand="1"
          SessionId="581"/>
    </SOAP-ENV:Header>