ADOMD.NET에서 연결 및 세션 작업
XMLA(XML for Analysis)에서 세션은 분석 데이터 액세스 동안 상태 저장 작업에 필요한 지원을 제공합니다. 세션은 분석 데이터 원본에 대한 명령 및 트랜잭션의 범위와 컨텍스트를 지정합니다. 세션 관리에 사용되는 XMLA 요소로는 BeginSession, Session 및 EndSession이 있습니다.
ADOMD.NET에서는 이러한 세 XMLA 세션 요소를 사용하여 세션을 시작하고, 세션 도중 쿼리를 수행하거나 데이터를 검색하고, 세션을 닫을 수 있습니다.
세션 시작
AdomdConnection 개체의 SessionID 속성에는 AdomdConnection 개체에 연결된 활성 세션의 식별자가 있습니다. 이 속성을 올바르게 사용하면 응용 프로그램에서 클라이언트 및 서버 상태 저장을 모두 효과적으로 제어할 수 있습니다.
Open 메서드를 호출할 때 SessionID 속성이 유효한 세션 ID로 설정되어 있지 않은 경우 AdomdConnection 개체는 공급자에게 새 세션 ID를 요청합니다. ADOMD.NET에서는 XMLA BeginSession 헤더를 공급자에게 보내어 세션을 시작합니다. 세션이 성공적으로 시작되면 ADOMD.NET에서는 SessionID 속성의 값을 새로 만들어진 세션의 세션 ID로 설정합니다.
Open 메서드를 호출할 때 SessionID 속성이 유효한 세션 ID로 설정되어 있는 경우 AdomdConnection 개체는 지정된 세션에 연결하려고 시도합니다.
AdomdConnection 개체가 지정된 세션에 연결할 수 없거나 공급자가 세션을 지원하지 않으면 예외가 throw됩니다.
[!참고]
ADOMD.NET에서 세션을 만든 후에는 여러 AdomdConnection 개체를 하나의 해당 활성 세션에 연결하거나 단일 AdomdConnection 개체와 해당 세션의 연결을 끊고 해당 개체를 다른 세션에 다시 연결할 수 있습니다.
세션 작업
ADOMD.NET에서는 AdomdConnection 개체를 유효한 세션에 연결한 후 응용 프로그램에서 만들어진 데이터 또는 메타데이터에 대한 모든 요청이 포함된 XMLA Session 헤더를 공급자에게 보냅니다. 모든 요청에는 SessionID 속성의 값으로 설정된 세션 ID가 있습니다.
세션 ID는 세션이 계속 유효한 상태로 유지됨을 보장하지 않습니다. 세션이 만료된 경우(예를 들어, 세션의 시간이 초과되거나 연결이 끊어진 경우) 공급자는 해당 세션의 동작을 종료하고 롤백할 수 있습니다. 이 경우 AdomdConnection 개체의 후속 메서드를 호출하면 항상 예외가 throw됩니다. 세션이 만료될 때가 아니라 다음 요청이 공급자에게 전송될 때만 예외가 throw되므로 응용 프로그램에서 공급자의 데이터 또는 메타데이터를 검색할 때 이러한 예외를 처리할 수 있어야 합니다.
세션 닫기
endSession 매개 변수의 값을 지정하지 않고 Close 메서드를 호출하거나 endSession 매개 변수가 True로 설정된 경우 세션에 대한 연결과 AdomdConnection 개체에 연결된 세션이 모두 닫힙니다. 세션을 닫기 위해 ADOMD.NET에서는 세션 ID가 SessionID 속성의 값으로 설정된 XMLA EndSession 헤더를 공급자에게 보냅니다.
endSession 매개 변수를 False로 설정하여 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;
}
}