Поделиться через


Работа с соединениями и сеансами в ADOMD.NET

В XML для аналитики (XMLA) сеансы обеспечивают поддержку операций с сохранением состояния при доступе к аналитическим данным. Сеансы образуют область и контекст команд и транзакций для источника аналитических данных. Используемые для управления сеансами элементы XMLA: BeginSession, Session и EndSession.

Компонент ADOMD.NET использует эти три элемента XMLA для работы с сеансами при запуске сеанса, выполнении запросов или получении данных во время сеанса, а также при его закрытии.

Запуск сеанса

Свойство SessionID объекта AdomdConnection содержит идентификатор активного сеанса, связанного с объектом AdomdConnection. Правильно пользуясь этим свойством, можно эффективно управлять контролем изменения состояния клиента и сервера в приложении:

  • Если при вызове метода Open свойству SessionID не задан допустимый идентификатор сеанса, объект AdomdConnection запрашивает у поставщика новый идентификатор сеанса. Компонент ADOMD.NET инициирует сеанс, отправляя поставщику заголовок XMLA BeginSession. Если попытка компонента ADOMD.NET запустить сеанс завершилась успешно, то ADOMD.NET устанавливает значение свойства SessionID в идентификатор только что созданного сеанса.

  • Если при вызове метода Open свойство SessionID имеет допустимый идентификатор сеанса, объект 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 TryEnd 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;    }}

См. также

Справочник