Arbeiten mit Verbindungen und Sitzungen in ADOMD.NET

In XML for Analysis (XMLA) unterstützen Sitzungen zustandsbehaftete Vorgänge während des Zugriffs auf analytische Daten. Sitzungen sind der Rahmen für den Bereich und den Kontext von Befehlen und Transaktionen für eine analytische Datenquelle. Die XMLA-Elemente, die verwendet werden, um Sitzungen zu verwalten, sind BeginSession, Session und EndSession.

ADOMD.NET verwendet diese drei XMLA-Sitzungselemente beim Start einer Sitzung, beim Durchführen einer Abfrage oder Abfragen von Daten während einer Sitzung und beim Beenden einer Sitzung.

Starten einer Sitzung

Die SessionID-Eigenschaft des AdomdConnection-Objekts enthält den Bezeichner der aktiven Sitzung, die dem AdomdConnection-Objekt zugeordnet ist. Durch die ordnungsgemäße Verwendung dieser Eigenschaft können Sie sowohl die Client- als auch die Server-Statusbehaftung in Ihrer Anwendung kontrollieren:

  • Wenn die SessionID-Eigenschaft bei Aufruf der Open-Methode nicht auf eine gültige Sitzungs-ID gesetzt ist, fordert das AdomdConnection-Objekt vom Anbieter eine neue Sitzungs-ID an. ADOMD.NET initiiert eine Sitzung, indem es einen XMLA-BeginSession-Header an den Anbieter sendet. Ist ADOMD.NET beim Start einer Sitzung erfolgreich, setzt ADOMD.NET den Wert der SessionID-Eigenschaft auf den Sitzungs-ID der neu generierten Sitzung.

  • Ist die SessionID bei Aufruf der Open-Methode auf eine gültige Sitzungs-ID gesetzt, versucht das AdomdConnection-Objekt, eine Verbindung zur angegebenen Sitzung aufzubauen.

Wenn das AdomdConnection-Objekt keine Verbindung zur angegebenen Sitzung aufbauen kann oder der Anbieter keine Sitzungen unterstützt, wird eine Ausnahme ausgelöst.

HinweisHinweis

Nachdem ADOMD.NET eine Sitzung generiert hat, können Sie mehrere AdomdConnection-Objekte mit einer einzelnen aktiven Sitzung verbinden oder die Verbindung eines einzelnen AdomdConnection-Objekts mit dieser Sitzung trennen und das Objekt mit einer anderen Sitzung verbinden.

Arbeiten in einer Sitzung

Nachdem ADOMD.NET das AdomdConnection-Objekt mit einer gültigen Sitzung verbunden hat, sendet ADOMD.NET mit jeder Abfrage nach Daten oder Metadaten, die von einer Anwendung vorgenommen wird, einen XMLA-Session-Header an den Anbieter. Bei jeder Abfrage wird die Sitzungs-ID auf den Wert der SessionID-Eigenschaft gesetzt.

Eine Sitzungs-ID garantiert nicht, dass eine Sitzung gültig bleibt. Wenn eine Sitzung abläuft (beispielsweise bei einem Timeout der Sitzung oder wenn die Verbindung unterbrochen wird), kann der Anbieter die Aktionen der Sitzung beenden und rückgängig machen. Wenn dies auftritt, lösen alle nachfolgenden Methodenaufrufe vom AdomdConnection-Objekt eine Ausnahme aus. Da Ausnahmen nur ausgelöst werden, wenn die nächste Abfrage zum Anbieter gesendet wird, und nicht, wenn die Sitzung abläuft, muss Ihre Anwendung in der Lage sein, diese Ausnahmen immer dann behandeln zu können, wenn Ihre Anwendung Daten oder Metadaten vom Anbieter empfängt.

Beenden einer Sitzung

Wenn die Close-Methode aufgerufen wird, ohne dass der Wert des endSession-Parameters angegeben wird, oder wenn der endSession-Parameter auf True gesetzt ist, werden sowohl die Verbindung mit der Sitzung als auch die zum AdomdConnection-Objekt gehörige Sitzung beendet. Um eine Sitzung zu beenden, sendet ADOMD.NET einen XMLA-EndSession-Header an den Anbieter, bei dem die Sitzungs-ID auf den Wert der SessionID-Eigenschaft gesetzt ist.

Wenn die Close-Methode aufgerufen wird und der endSession-Parameter auf False gesetzt ist, bleibt die zum AdomdConnection-Objekt gehörende Sitzung aktiv, aber die Verbindung zur Sitzung wird beendet.

Beispiel für die Verwaltung einer Sitzung

Das folgende Beispiel veranschaulicht, wie eine Verbindung geöffnet, eine Sitzung generiert und eine Verbindung beendet wird, während in ADOMD.NET die Sitzung geöffnet bleibt:

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;
    }
}