Trabalhando com conexões e com sessões no ADOMD.NET
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ítica. 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 propriedade SessionID do objeto AdomdConnection contém o identificador da sessão ativa associada ao objeto AdomdConnection. 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 propriedade SessionID não for definida para uma ID de sessão válida quando o método de Open for chamado, o objeto AdomdConnection 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 o ADOMD.NET tiver êxito em iniciar uma sessão, o ADOMD.NET definirá o valor da propriedade de SessionID para a ID de sessão da sessão recém-criada.
Se a propriedade SessionID não for definida para uma ID de sessão válida quando o método Open for chamado, o objeto AdomdConnection tentará se conectar à sessão especificada.
Se o objeto AdomdConnection não puder se conectar à sessão especificada, ou se o provedor não der suporte a sessões, uma exceção será lançada.
Observação |
---|
Depois de fazer o ADOMD.NET criar uma sessão, você poderá conectar vários objetos de AdomdConnection a essa sessão ativa única ou poderá desconectar um único objeto AdomdConnection dessa sessão e reconectá-lo a outra sessão. |
Trabalhando em uma sessão
Depois que o ADOMD.NET conecta o objeto AdomdConnection a uma sessão válida, enviará um cabeçalho Session XMLA ao provedor com todas as solicitações de dados ou de metadados feitas por um aplicativo. Todas as solicitações terão a ID de sessão definida como o valor da propriedade de SessionID.
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 método subseqüentes do objeto AdomdConnection 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
Se o método Close for chamado sem a especificação do valor do parâmetro endSession, ou se o parâmetro endSession for definido como verdadeiro, a conexão à sessão e a sessão associada ao objeto AdomdConnection serão fechadas. Para fechar uma sessão, o ADOMD.NET envia um cabeçalho EndSession XMLA ao provedor, com a ID de sessão definida como o valor da propriedade SessionID.
Se o método Close for chamado com o parâmetro endSession definido como falso, a sessão associada ao objeto AdomdConnection permanecerá ativo, mas a conexão à sessão será interrompida.
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;
}
}