接続およびセッションの管理 (XMLA)
ステートフル性 は、サーバーがメソッド呼び出しの間にクライアントの ID とコンテキストを保持する条件です。 ステートレス とは、メソッド呼び出しが完了した後にサーバーがクライアントの 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 がこの値域に含まれている必要があります。 |
Note
セッション ID は、そのセッションが引き続き有効であることを保証するものではありません。 セッションの有効期限が切れた場合 (たとえば、タイムアウトが生じた場合や、接続が失われた場合など)、プロバイダーはそのセッションのアクションを終了してロールバックすることができます。 その結果、同じセッション ID でのクライアントからの後続のメソッド呼び出しはすべて、セッションが有効でないことを示すエラーによって失敗します。 クライアントは、この状況に対処し、そのセッションのメソッド呼び出しを最初から再送信するよう準備する必要があります。
古いコードの例
以下の例は、セッションがどのようにサポートされるかを示しています。
セッションを開始するには、クライアントからのアウトバウンド 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>
プロバイダーからの SOAP 応答メッセージには、XMLA ヘッダー タグ <SessionId を使用して、リターン ヘッダー領域にセッション ID が含まれています>。
<SOAP-ENV:Header> <XA:Session xmlns:XA="urn:schemas-microsoft-com:xml-analysis" SessionId="581"/> </SOAP-ENV:Header>
セッションのメソッド呼び出しごとに、プロバイダーから返されたセッション ID を含む Session ヘッダーを追加する必要があります。
<SOAP-ENV:Header> <XA:Session xmlns:XA="urn:schemas-microsoft-com:xml-analysis" mustUnderstand="1" SessionId="581"/> </SOAP-ENV:Header>
セッションが完了すると、関連するセッション 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>