Partilhar via


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çãoObservaçã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;
    }
}

Consulte também

Referência