ADOMD.NET での接続およびセッションの使用
XML for Analysis (XMLA) では、分析データにアクセスする際のステートフルな操作をセッションがサポートします。 セッションは、分析データ ソースに対して実行するコマンドおよびトランザクションのスコープとコンテキストを決定します。 セッション管理で使用する XMLA 要素は、BeginSession、Session、および EndSession です。
ADOMD.NET はこれらの XMLA セッション要素を使用して、セッションを開始し、クエリの実行やデータの取得を行い、セッションを閉じます。
セッションの開始
AdomdConnection オブジェクトの SessionID プロパティには、AdomdConnection オブジェクトに関連付けられたアクティブなセッションの ID が格納されています。 このプロパティを正しく使用することで、クライアントとサーバー両方のステートフル性をアプリケーションで効率的に制御することができます。
Open メソッドを呼び出す際、SessionID プロパティに有効なセッション ID が設定されていないと、AdomdConnection オブジェクトはプロバイダーに新しいセッション ID を要求します。 ADOMD.NET は、XMLA BeginSession ヘッダーをプロバイダーに送信することでセッションを初期化します。 セッションの開始に成功すると、ADOMD.NET は、SessionID プロパティの値を、新たに作成したセッションのセッション ID に設定します。
Open メソッドを呼び出す際、SessionID プロパティに有効なセッション ID が設定されている場合、AdomdConnection オブジェクトは指定されたセッションに接続しようとします。
AdomdConnection オブジェクトが指定されたセッションに接続できない場合、またはプロバイダーがセッションをサポートしない場合は、例外がスローされます。
注 |
---|
ADOMD.NET でセッションを作成した後、複数の AdomdConnection オブジェクトをその単一のアクティブなセッションに接続することも、単一の AdomdConnection オブジェクトをそのセッションから接続解除して別のセッションに再接続することもできます。 |
セッションでの作業
ADOMD.NET は、AdomdConnection オブジェクトを有効なセッションに接続した後、アプリケーションからのデータまたはメタデータのすべての要求と共に、XMLA Session ヘッダーをプロバイダーに送信します。 すべての要求のセッション ID が、SessionID プロパティの値に設定されます。
セッションが有効な状態で維持されるかどうかは、セッション ID で保証されるわけではありせん。 セッションが期限切れになった場合 (たとえば、タイムアウトが発生するか、接続が失われた場合)、プロバイダーはそのセッションの処理を終了してロールバックすることを選択できます。 その場合、AdomdConnection オブジェクトが行うそれ以降のすべてのメソッド呼び出しは例外をスローします。 セッションが期限切れになったときではなく、次の要求がプロバイダーに送信されるときのみ例外がスローされるため、アプリケーションは、プロバイダーからデータまたはメタデータを取得するときにはいつでもこれらの例外を処理できる必要があります。
セッションの終了
endSession パラメーターの値を指定せずに Close メソッドを呼び出した場合、または endSession パラメーターが True に設定されている場合は、セッションへの接続および AdomdConnection オブジェクトに関連付けられたセッションの両方が閉じられます。 セッションを閉じるために、ADOMD.NET は、SessionID プロパティの値に設定されたセッション ID と共に、XMLA EndSession ヘッダーをプロバイダーに送信します。
False に設定された endSession パラメーターで Close メソッドが呼び出された場合、AdomdConnection オブジェクトに関連付けられたセッションはアクティブのままとなりますが、セッションへの接続は閉じられます。
セッション管理の例
次の例では、接続を開いてセッションを作成し、セッションを ADOMD.NET で開いた状態で接続を閉じます。
Public Function CreateSession(ByVal connectionString As String) As String
Dim strSessionID As String = ""
Dim objConnection As New AdomdConnection
Try
' First, try to connect to the specified data source.
' If the connection string is not valid, or if the specified
' provider does not support sessions, an exception is thrown.
objConnection.ConnectionString = connectionString
objConnection.Open()
' Now that the connection is open, retrieve the new
' active session ID.
strSessionID = objConnection.SessionID
' Close the connection, but leave the session open.
objConnection.Close(False)
Return strSessionID
Finally
objConnection = Nothing
End Try
End Function
static string CreateSession(string connectionString)
{
string strSessionID = "";
AdomdConnection objConnection = new AdomdConnection();
try
{
/*First, try to connect to the specified data source.
If the connection string is not valid, or if the specified
provider does not support sessions, an exception is thrown. */
objConnection.ConnectionString = connectionString;
objConnection.Open();
// Now that the connection is open, retrieve the new
// active session ID.
strSessionID = objConnection.SessionID;
// Close the connection, but leave the session open.
objConnection.Close(false);
return strSessionID;
}
finally
{
objConnection = null;
}
}