Connessioni in ADOMD.NET - Utilizzo di connessioni e sessioni

In XML for Analysis (XMLA) le sessioni forniscono supporto per le operazioni con stato durante l'accesso ai dati analitici. Le sessioni costituiscono l'ambito e il contesto di comandi e transazioni per un'origine dati analitici. Gli elementi XMLA utilizzati per gestire sessioni sono BeginSession, Session ed EndSession.

ADOMD.NET utilizza questi tre elementi della sessione XMLA quando si avvia una sessione, si esegue una query o si recuperano dati durante una sessione e quando si chiude una sessione.

Avvio di una sessione

La SessionID proprietà AdomdConnection dell'oggetto contiene l'identificatore della sessione attiva associata AdomdConnection all'oggetto . L'utilizzo corretto di questa proprietà consente di controllare in modo efficace le informazioni sullo stato sia del client che del server nell'applicazione:

  • Se la proprietà non è impostata su un ID di sessione valido quando viene chiamato il metodo , l'oggetto richiede un nuovo SessionID ID di sessione al Open AdomdConnection provider. ADOMD.NET avvia una sessione inviando un'intestazione XMLA BeginSession al provider. Se ADOMD.NET ha esito positivo avvia una sessione, ADOMD.NET imposta il valore della proprietà sull'ID sessione SessionID della sessione appena creata.

  • Se la proprietà è impostata su un ID di sessione valido quando viene chiamato il metodo SessionID Open , l'oggetto tenta di AdomdConnection connettersi alla sessione specificata.

Se l'oggetto non può connettersi alla sessione specificata o se il provider non AdomdConnection supporta le sessioni, viene generata un'eccezione.

Nota

Dopo aver creato ADOMD.NET sessione, è possibile connettere più oggetti alla singola sessione attiva oppure disconnettere un singolo oggetto da tale sessione e riconnettere l'oggetto a un'altra AdomdConnection AdomdConnection sessione.

Utilizzo di una sessione

Dopo ADOMD.NET connette l'oggetto a una sessione valida, ADOMD.NET invierà un'intestazione di sessione XMLA al provider con ogni richiesta di dati o metadati effettuata da AdomdConnection un'applicazione. Ogni richiesta avrà l'ID sessione impostato sul valore della SessionID proprietà .

Un ID di sessione non garantisce che una sessione rimanga valida. Se la sessione scade (ad esempio se si verifica un timeout o se la connessione si interrompe), il provider può scegliere di terminare le azioni di tale sessione e di eseguirne il rollback. In questo caso, tutte le chiamate successive al metodo AdomdConnection dall'oggetto genereranno un'eccezione. Poiché le eccezioni vengono generate solo quando la successiva richiesta viene inviata al provider e non quando la sessione scade, l'applicazione deve essere in grado di gestire tali eccezioni in qualsiasi momento l'applicazione recuperi dati o metadati dal provider.

Chiusura di una sessione

Se il metodo viene chiamato senza specificare il valore del parametro endSession o se il parametro endSession è impostato su True, la connessione alla sessione e la sessione associata all'oggetto Close vengono AdomdConnection chiuse. Per chiudere una sessione, ADOMD.NET un'intestazione XMLA EndSession al provider, con l'ID sessione impostato sul valore della SessionID proprietà .

Se il metodo viene chiamato con il parametro endSession impostato su False, la sessione associata all'oggetto rimane attiva ma la Close connessione alla sessione viene AdomdConnection chiusa.

Esempio di gestione di una sessione

Nell'esempio seguente viene illustrato come aprire una connessione, creare una sessione e chiudere la connessione mantenendo aperta la sessione in 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;  
    }  
}