Partilhar via


Gerenciando conexões e sessões (XMLA)

Estado é uma condição durante a qual o servidor preserva a identidade e o contexto de um cliente entre chamadas de método. A falta de estado é uma condição durante a qual o servidor não se lembra da identidade e do contexto de um cliente após a conclusão de uma chamada de método.

Para fornecer estado, o XML for Analysis (XMLA) dá suporte a sessões que permitem que uma série de instruções sejam executadas em conjunto. Um exemplo dessa série de instruções seria a criação de um membro calculado que deve ser usado em consultas subsequentes.

Em geral, as sessões no XMLA seguem o seguinte comportamento descrito pela especificação OLE DB 2.6:

  • As sessões definem o escopo de contexto de transação e comando.

  • Vários comandos podem ser executados no contexto de uma única sessão.

  • O suporte para transações no contexto XMLA é por meio de comandos específicos do provedor enviados com o método Execute .

O XMLA define uma maneira de dar suporte a sessões em um ambiente Web em um modo semelhante à abordagem usada pelo protocolo DAV (Criação Distribuída e Controle de Versão) para implementar o bloqueio em um ambiente flexívelmente acoplado. Essa implementação paraleliza o DAV, pois o provedor tem permissão para expirar sessões por vários motivos (por exemplo, um tempo limite ou erro de conexão). Quando há suporte para sessões, os serviços Web devem estar cientes e prontos para lidar com conjuntos interrompidos de comandos que devem ser reiniciados.

A especificação SOAP (Protocolo de Acesso a Objetos Simples) do W3C (World Wide Web Consortium) recomenda o uso de cabeçalhos SOAP para criar novos protocolos em cima de mensagens SOAP. A tabela a seguir lista os elementos de cabeçalho SOAP e os atributos que o XMLA define para iniciar, manter e fechar uma sessão.

Cabeçalho SOAP Descrição
BeginSession Esse cabeçalho solicita que o provedor crie uma nova sessão. O provedor deve responder construindo uma nova sessão e retornando a ID da sessão como parte do cabeçalho de sessão na resposta SOAP.
Id da Sessão A área de valor contém a ID da sessão que deve ser usada em cada chamada de método para o restante da sessão. O provedor na resposta SOAP envia essa marca e o cliente também deve enviar esse atributo com cada elemento de cabeçalho de sessão.
Sessão Para cada chamada de método que ocorre na sessão, esse cabeçalho deve ser usado e a ID da sessão deve ser incluída na área de valor do cabeçalho.
EndSession Para encerrar a sessão, use este cabeçalho. A ID da sessão deve ser incluída com a área de valor.

Observação

Uma ID de sessão não garante que uma sessão permaneça válida. Se a sessão expirar (por exemplo, se ela atingir o tempo limite ou a conexão for perdida), o provedor poderá optar por encerrar e reverter as ações dessa sessão. Como resultado, todas as chamadas de método subsequentes do cliente em uma ID de sessão falham com um erro sinalizando uma sessão que não é válida. Um cliente deve lidar com essa condição e estar preparado para reenviar as chamadas de método de sessão desde o início.

Exemplo de código herdado

O exemplo a seguir mostra como as sessões têm suporte.

  1. Para iniciar a sessão, adicione um cabeçalho BeginSession em SOAP à chamada de método XMLA de saída do cliente. A área de valor está inicialmente em branco porque a ID da sessão ainda não é conhecida.

    <SOAP-ENV:Envelope  
       xmlns:SOAP-ENV="https://schemas.xmlsoap.org/soap/envelope/"  
       SOAP-ENV:encodingStyle="https://schemas.xmlsoap.org/soap/encoding/">  
       <SOAP-ENV:Header>  
          <XA:BeginSession  
             xmlns:XA="urn:schemas-microsoft-com:xml-analysis"  
             xsi:type="xsd:int"  
             mustUnderstand="1"/>  
       </SOAP-ENV:Header>  
       <SOAP-ENV:Body>  
          ...<!-- Discover or Execute call goes here.-->  
       </SOAP-ENV:Body>  
    </SOAP-ENV:Envelope>  
    
  2. A mensagem de resposta SOAP do provedor inclui a ID da sessão na área de cabeçalho de retorno, usando a marca <de cabeçalho XMLA SessionId>.

    <SOAP-ENV:Header>  
       <XA:Session  
          xmlns:XA="urn:schemas-microsoft-com:xml-analysis"  
          SessionId="581"/>  
    </SOAP-ENV:Header>  
    
  3. Para cada chamada de método na sessão, o cabeçalho de sessão deve ser adicionado, contendo a ID da sessão retornada do provedor.

    <SOAP-ENV:Header>  
       <XA:Session  
          xmlns:XA="urn:schemas-microsoft-com:xml-analysis"  
          mustUnderstand="1"  
          SessionId="581"/>  
    </SOAP-ENV:Header>  
    
  4. Quando a sessão for concluída, a <marca EndSession> será usada, contendo o valor da ID da sessão relacionada.

    <SOAP-ENV:Header>  
       <XA:EndSession  
          xmlns:XA="urn:schemas-microsoft-com:xml-analysis"  
          xsi:type="xsd:int"  
          mustUnderstand="1"  
          SessionId="581"/>  
    </SOAP-ENV:Header>  
    

Consulte Também

Desenvolvimento com XMLA em Analysis Services