Utilisation de connexions et de sessions dans ADOMD.NET

Dans le cadre de XMLA (XML for Analysis), les sessions fournissent une prise en charge des opérations avec état pendant l'accès à des données analytique. Les sessions définissent la portée et le contexte des commandes et des transactions pour une source de données analytiques. Les éléments XMLA utilisés pour gérer les sessions sont BeginSession, Session et EndSession.

ADOMD.NET utilise ces trois éléments de session XMLA lorsque vous démarrez une session, exécutez des requêtes ou récupérez des données pendant la session et fermez une session.

Démarrage d'une session

La propriété SessionID de l'objet AdomdConnection contient l'identificateur de la session active associée à l'objet AdomdConnection. Par une utilisation appropriée de cette propriété, vous pouvez contrôler de façon efficace l'état du client et du serveur dans votre application :

  • Si la propriété SessionID n'indique pas un ID de session valide lorsque la méthode Open est appelée, l'objet AdomdConnection demande un nouvel ID de session auprès du fournisseur. ADOMD.NET initie une session en envoyant un en-tête BeginSession XMLA au fournisseur. Si ADOMD.NET parvient à démarrer une session, ADOMD.NET définit la valeur de la propriété SessionID en lui attribuant l'ID de la session nouvellement créée.

  • Si la propriété SessionID indique un ID de session valide lorsque la méthode Open est appelée, l'objet AdomdConnection tente de se connecter à la session spécifiée.

Si l'objet AdomdConnection ne parvient pas à se connecter à la session spécifiée ou si le fournisseur ne prend pas en charge les sessions, une exception est levée.

Notes

Dès lors qu'ADOMD.NET a créé une session, vous pouvez connecter plusieurs objets AdomdConnection à cette session active unique, ou vous pouvez déconnecter un objet AdomdConnection unique de cette session et le reconnecter à une autre session.

Utilisation d'une session

Après avoir connecté l'objet AdomdConnection à une session valide, ADOMD.NET envoie un en-tête Session XMLA au fournisseur en même temps que chaque demande de données ou de métadonnées formulée par une application. Pour chaque demande, l'ID de session correspond à la valeur de la propriété SessionID.

Un ID de session ne garantit pas qu'une session reste valide. Si la session expire (par exemple, en cas de dépassement de délai de la session ou de perte de la connexion), le fournisseur peut choisir de terminer et d'annuler les actions de cette session. Dans ce cas, tous les appels de méthode suivants de l'objet AdomdConnection lèveront une exception. Les exceptions n'étant levées qu'au moment de l'envoi de la demande suivante au fournisseur, et non au moment où la session expire, votre application doit être en mesure de gérer ces exceptions chaque fois que votre application récupère des données ou des métadonnées auprès du fournisseur.

Fermeture d'une session

Si la méthode Close est appelée sans que la valeur du paramètre endSession soit spécifiée, ou si le paramètre endSession est défini à True, la connexion à la session et la session associée à l'objet AdomdConnection sont fermées. Pour fermer une session, ADOMD.NET envoie un en-tête EndSession XMLA au fournisseur, accompagné de l'ID de session qui correspond à la valeur de la propriété SessionID.

Si la méthode Close est appelée et que le paramètre endSession est défini à False, la session associée à l'objet AdomdConnection reste active mais la connexion à la session est fermée.

Exemple de gestion d'une session

L'exemple suivant montre comment ouvrir une connexion, créer une session et fermer la connexion tout en maintenant la session ouverte dans 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;
    }
}