Partilhar via


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