Работа с соединениями и сеансами в ADOMD.NET
В XML для аналитики (XMLA) сеансы обеспечивают поддержку операций с сохранением состояния при доступе к аналитическим данным. Сеансы образуют область и контекст команд и транзакций для источника аналитических данных. Используемые для управления сеансами элементы XMLA — BeginSession, Session и EndSession.
Компонент ADOMD.NET использует эти три элемента XMLA для работы с сеансами при запуске сеанса, выполнении запросов или получении данных во время сеанса, а также при его закрытии.
Запуск сеанса
Свойство SessionID объекта AdomdConnection содержит идентификатор активного сеанса, связанного с объектом AdomdConnection. Правильно пользуясь этим свойством, можно эффективно управлять поддержкой состояния клиента и сервера в приложении.
Если свойству SessionID не задан допустимый идентификатор сеанса при вызове метода Open, объект AdomdConnection запрашивает у поставщика новый идентификатор сеанса. Компонент ADOMD.NET инициирует сеанс, отправляя поставщику заголовок XMLA BeginSession. Если попытка компонента ADOMD.NET запустить сеанс завершилась успешно, то ADOMD.NET устанавливает значение свойства SessionID, равное идентификатору только что созданного сеанса.
Если свойство SessionID при вызове метода Open имеет допустимый идентификатор сеанса, то объект AdomdConnection пытается подключиться к указанному сеансу.
Если объекту AdomdConnection не удается установить соединение с указанным сеансом или если поставщик не поддерживает сеансы, возникает исключение.
Примечание |
---|
После того как компонент ADOMD.NET создал сеанс, к этому единственному активному сеансу можно подключить несколько объектов AdomdConnection, кроме того, можно также отключить один объект AdomdConnection от этого сеанса и подключить его к другому. |
Работа с сеансом
После того как компонент ADOMD.NET подключит объект AdomdConnection к допустимому сеансу, ADOMD.NET будет отправлять поставщику заголовок XMLA Session с каждым запросом данных или метаданных, произведенным приложением. В каждом запросе идентификатору сеанса будет задано значение свойства SessionID.
Наличие идентификатора сеанса не гарантирует того, что сеанс остается допустимым. Если время сеанса истекает (например, если истекло его время ожидания или потеряно соединение), поставщик может завершить и выполнить откат действий, выполнявшихся во время сеанса. В этом случае все последующие вызовы методов, поступающие от объекта AdomdConnection, будут вызывать исключение. Приложение должно быть в состоянии обрабатывать эти исключения в любой момент при получении данных или метаданных от поставщика, так как они возникают только при отправке поставщику следующего запроса, а не по истечении времени сеанса.
Закрытие сеанса
Если метод Close вызывается без указания значения параметра endSession, либо если параметру endSession присвоено значение TRUE, закрываются и соединение с сеансом, и сам сеанс, связанный с объектом AdomdConnection. Чтобы закрыть сеанс, компонент ADOMD.NET отправляет поставщику заголовок XMLA EndSession, в котором идентификатору сеанса присвоено значение свойства SessionID.
Если метод Close вызывается с параметром endSession, которому задано значение FALSE, то сеанс, связанный с объектом 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;
}
}