Conexões no ADOMD.NET – Trabalhar com conexões e sessões
No XMLA (XML for Analysis), sessões dão suporte a operações de estado durante o acesso a dados analíticos. As sessões enquadram o escopo e o contexto de comandos e de transações para uma fonte de dados analíticos. Os elementos XMLA usados para gerenciar sessões são BeginSession, Session e EndSession.
O ADOMD.NET usa esses três elementos de sessão XMLA quando você inicia uma sessão, executa consultas ou recupera dados durante a sessão e fecha uma sessão.
Iniciando uma sessão
A SessionID propriedade do objeto AdomdConnection contém o identificador da sessão ativa associada ao AdomdConnection objeto . Ao usar essa propriedade corretamente, você poderá controlar efetivamente a capacidade de manutenção de status do processo de cliente e de servidor em seu aplicativo:
Se a SessionID propriedade não estiver definida como uma ID Open de sessão válida quando o método for chamado, AdomdConnection o objeto solicitará uma nova ID de sessão do provedor. O ADOMD.NET inicia uma sessão enviando um cabeçalho BeginSession XMLA ao provedor. Se ADOMD.NET for bem-sucedido estiver iniciando uma sessão, ADOMD.NET o SessionID valor da propriedade como a ID de sessão da sessão recém-criada.
Se a SessionID propriedade for definida como uma ID Open de sessão válida quando o método for chamado, AdomdConnection o objeto tentará se conectar à sessão especificada.
Se o AdomdConnection objeto não puder se conectar à sessão especificada ou se o provedor não tiver suporte para sessões, uma exceção será lançada.
Observação
Depois de ter ADOMD.NET uma sessão, AdomdConnection você pode conectar vários objetos a essa única sessão ativa ou AdomdConnection pode desconectar um único objeto dessa sessão e reconectar esse objeto a outra sessão.
Trabalhando em uma sessão
Depois ADOMD.NET AdomdConnection conectar o objeto a uma sessão válida, o ADOMD.NET enviará um header de Sessão XMLA para o provedor com cada solicitação de dados ou metadados feitos por um aplicativo. Cada solicitação terá a ID da sessão definida como o valor da SessionID propriedade.
Uma ID de sessão não garante que uma sessão permanecerá válida. Se a sessão expirar (por exemplo, se o tempo limite da sessão for alcançado ou se a conexão for interrompida), o provedor poderá optar por encerrar e reverter as ações dessa sessão. Se isso ocorrer, todas as chamadas de método subsequentes do AdomdConnection objeto lançarão uma exceção. Como as exceções são lançadas somente quando a próxima solicitação é enviada ao provedor, e não quando a sessão expira, o seu aplicativo deve ser capaz de manipulá-las sempre que o seu aplicativo recuperar dados ou metadados do provedor.
Fechando uma sessão
Close Se o método for chamado sem especificar o valor do parâmetro endSession ou se o parâmetro endSession estiver definido como True, AdomdConnection a conexão com a sessão e a sessão associada ao objeto serão fechadas. Para fechar uma sessão, ADOMD.NET envia um header EndSession XMLA para o provedor, com a ID da sessão definida como o valor da SessionID propriedade.
Se o Close método for chamado com o parâmetro endSession definido como False, AdomdConnection a sessão associada ao objeto permanecerá ativa, mas a conexão com a sessão será fechada.
Exemplo de gerenciamento de uma sessão
O exemplo a seguir demonstra como abrir uma conexão, criar uma sessão e fechar a conexão mantendo-a aberta no 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;
}
}