Trabajar con conexiones y sesiones en ADOMD.NET
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 propiedad SessionID del objeto AdomdConnection contiene el identificador de la sesión activa asociada al objeto AdomdConnection. Utilizando correctamente esta propiedad, puede controlar eficazmente tanto la compatibilidad con el cliente como con el servidor en su aplicación:
Si la propiedad SessionID no está establecida en un identificador de sesión válido cuando se llama al método Open, el objeto AdomdConnection solicita un nuevo identificador de sesión del proveedor. ADOMD.NET inicia una sesión enviando un encabezado BeginSession de XMLA al proveedor. Si ADOMD.NET inicia una sesión correctamente, ADOMD.NET establece el valor de la propiedad SessionID en el identificador de sesión de la sesión recién creada.
Si la propiedad SessionID está establecida en un identificador de sesión válido cuando se llama al método Open, el objeto AdomdConnection intenta realizar la conexión a la sesión especificada.
Si el objeto AdomdConnection 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 que ADOMD.NET haya creado una sesión, puede conectar varios objetos AdomdConnection a esa única sesión activa o bien puede desconectar un objeto AdomdConnection único de esa sesión y volver a conectar ese objeto a otra sesión.
Trabajar en una sesión
Después de que ADOMD.NET conecta el objeto AdomdConnection a una sesión válida, ADOMD.NET enviará un encabezado Session de XMLA al proveedor con cada solicitud de datos o metadatos realizada por una aplicación. Cada solicitud tendrá el identificador de sesión establecido en el valor de la propiedad SessionID.
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 se produce, todas las llamadas subsiguientes al método del objeto AdomdConnection producirán una excepción. Dado que sólo 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 llama al método Close sin especificar el valor del parámetro endSession, o si el parámetro endSession está establecido en True, se cierran tanto la conexión a la sesión como la sesión asociada al objeto AdomdConnection. Para cerrar una sesión, ADOMD.NET envía un encabezado EndSession de XMLA al proveedor, con el identificador de sesión establecido en el valor de la propiedad SessionID.
Si se llama al método Close con el conjunto de parámetro endSession establecido en False, la sesión asociada al objeto AdomdConnection 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;
}
}