Compartir a través de


Conexiones en ADOMD.NET: trabajar con conexiones y sesiones

En XML for Analysis (XMLA), las sesiones proporcionan compatibilidad para las operaciones con estado durante el acceso a datos analíticos. Las sesiones enmarcan el ámbito y contexto de comandos y transacciones para un origen de datos analíticos. Los elementos XMLA utilizados para administrar sesiones son BeginSession, Session y EndSession.

ADOMD.NET usa estos tres elementos de sesión XMLA cuando se inicia una sesión, se realizan consultas o se recuperan datos durante la sesión, además de cerrar una sesión.

Iniciar un sesión

La SessionID propiedad del objeto AdomdConnection contiene el identificador de la sesión activa asociada al AdomdConnection objeto . Utilizando correctamente esta propiedad, puede controlar eficazmente la disponibilidad de estados de cliente y de servidor en su aplicación:

  • Si la SessionID propiedad no se establece en un Open identificador de sesión válido cuando se llama al método , AdomdConnection el objeto solicita un nuevo identificador de sesión al proveedor. ADOMD.NET inicia una sesión enviando un encabezado BeginSession de XMLA al proveedor. Si ADOMD.NET está iniciando correctamente una sesión, ADOMD.NET establece SessionID el valor de la propiedad en el identificador de sesión de la sesión recién creada.

  • Si la SessionID propiedad se establece en un identificador de sesión válido Open cuando se llama al método , AdomdConnection el objeto intenta conectarse a la sesión especificada.

Si el AdomdConnection objeto no se puede conectar a la sesión especificada o si el proveedor no admite sesiones, se produce una excepción.

Nota

Después de haber ADOMD.NET crear una sesión, AdomdConnection puede conectar varios objetos a esa sesión activa única, AdomdConnection o puede desconectar un único objeto de esa sesión y volver a conectar ese objeto a otra sesión.

Trabajar en una sesión

Después ADOMD.NET conectar el objeto a una sesión válida, ADOMD.NET enviará un encabezado de sesión XMLA al proveedor con cada solicitud de datos o metadatos AdomdConnection realizada por una aplicación. Cada solicitud tendrá el identificador de sesión establecido en el valor de la SessionID propiedad .

Un identificador de sesión no garantiza que una sesión siga siendo válida. Si la sesión expira (por ejemplo, se agota el tiempo de espera de la sesión o se pierde la conexión), el proveedor puede optar por finalizar y revertir las acciones de esa sesión. Si esto ocurre, todas las llamadas de método subsiguientes desde el AdomdConnection objeto producirán una excepción. Dado que solo se producen las excepciones cuando la solicitud siguiente se envía al proveedor, no cuando la sesión expira, su aplicación debe ser capaz de manejar estas excepciones cada vez que recupere datos o metadatos del proveedor.

Cerrar una sesión

Si se Close llama al método sin especificar el valor del parámetro endSession o si el parámetro endSession está establecido en True, AdomdConnection se cierran tanto la conexión a la sesión como la sesión asociada al objeto . Para cerrar una sesión, ADOMD.NET un encabezado EndSession XMLA al proveedor, con el identificador de sesión establecido en el valor de la SessionID propiedad .

Si se Close llama al método con el parámetro endSession establecido en False, AdomdConnection la sesión asociada al objeto permanece activa pero se cierra la conexión a la sesión.

Ejemplo de administración de una sesión

En el ejemplo siguiente se muestra cómo abrir una conexión, crear una sesión y cerrar la conexión manteniendo la sesión abierta en 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;  
    }  
}