ステートフル性 は、サーバーがメソッド呼び出しの間にクライアントの ID とコンテキストを保持する条件です。 ステートレス とは、メソッド呼び出しの完了後にサーバーがクライアントの ID とコンテキストを記憶しない条件です。
ステートフル性を提供するために、XML for Analysis (XMLA) では、一連のステートメントを同時に実行できる セッション がサポートされています。 このような一連のステートメントの例として、後続のクエリで使用される計算メンバーの作成があります。
一般に、XMLA のセッションは、OLE DB 2.6 仕様で概説されている次の動作に従います。
セッションでは、トランザクションとコマンドコンテキストのスコープを定義します。
1 つのセッションのコンテキストで複数のコマンドを実行できます。
XMLA コンテキストでのトランザクションのサポートは、 Execute メソッドを使用して送信されるプロバイダー固有のコマンドを通じて行われます。
XMLA は、分散オーサリングおよびバージョン管理 (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) | 値領域には、セッションの残りの部分の各メソッド呼び出しで使用する必要があるセッション ID が含まれています。 SOAP 応答のプロバイダーは、このタグを送信し、クライアントも各 Session ヘッダー要素と共にこの属性を送信する必要があります。 |
セッション | セッションで発生するすべてのメソッド呼び出しに対して、このヘッダーを使用し、セッション ID をヘッダーの値領域に含める必要があります。 |
EndSession | セッションを終了するには、このヘッダーを使用します。 セッション ID は値領域に含まれている必要があります。 |
注
セッション ID は、セッションが有効なままであることを保証するものではありません。 セッションの有効期限が切れた場合 (タイムアウトや接続が失われた場合など)、プロバイダーはそのセッションのアクションを終了してロールバックすることを選択できます。 その結果、セッション ID に対するクライアントからの後続のメソッド呼び出しはすべて失敗し、無効なセッションを通知するエラーが発生します。 クライアントは、この条件を処理し、最初からセッション メソッド呼び出しを再送信する準備をする必要があります。
従来のコード例
次の例は、セッションのサポート方法を示しています。
セッションを開始するには、SOAP の BeginSession ヘッダーをクライアントからの送信 XMLA メソッド呼び出しに追加します。 セッション 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>