Utilizzo di connessioni e sessioni in ADOMD.NET
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 proprietà SessionID dell'oggetto AdomdConnection contiene l'identificatore della sessione attiva associata all'oggetto AdomdConnection. 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à SessionID non è impostata su un ID di sessione valido quando il metodo Open viene chiamato, per l'oggetto AdomdConnection è necessario impostare un nuovo ID di sessione dal provider. ADOMD.NET avvia una sessione inviando un'intestazione XMLA BeginSession al provider. Se la sessione viene avviata in modo corretto, ADOMD.NET imposta il valore della proprietà SessionID sull'ID di sessione della sessione appena creata.
Se la proprietà SessionID è impostata su un ID di sessione valido quando il metodo Open viene chiamato, l'oggetto AdomdConnection tenta di connettersi alla sessione specificata.
Se l'oggetto AdomdConnection non può connettersi alla sessione specificata o se il provider non supporta sessioni, viene generata un'eccezione.
[!NOTA]
Dopo avere creato una sessione in ADOMD.NET, è possibile connettere più oggetti AdomdConnection solo a tale sessione attiva oppure è possibile disconnettere un unico oggetto AdomdConnection da tale sessione e riconnetterlo a un'altra sessione.
Utilizzo di una sessione
Dopo che ADOMD.NET ha connesso l'oggetto AdomdConnection a una sessione valida, invierà un'intestazione XMLA Session al provider con tutte le richieste di dati o metadati fatti effettuate da un'applicazione. L'ID di sessione di ogni richiesta è impostato sul valore della proprietà SessionID.
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 dall'oggetto AdomdConnection 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 Close viene chiamato senza specificare il valore del parametro endSession o se il parametro endSession è impostato su True, sia la connessione alla sessione che la sessione associata all'oggetto AdomdConnection vengono chiuse. Per chiudere una sessione, ADOMD.NET invia un'intestazione XMLA EndSession al provider, con l'ID di sessione impostato sul valore della proprietà SessionID.
Se il metodo Close viene chiamato con il parametro endSession impostato su False, la sessione associata all'oggetto AdomdConnection rimane attiva, ma la connessione alla sessione viene 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;
}
}