Condividi tramite


Gestione di connessioni e sessioni (XMLA)

Lo stato è una condizione durante la quale il server mantiene l'identità e il contesto di un client tra le chiamate al metodo. Senza stato è una condizione in cui il server non memorizza l'identità e il contesto di un client dopo che una chiamata al metodo è terminata.

Per garantire lo stato, XML for Analysis (XMLA) supporta sessioni che consentono l'esecuzione di una serie di istruzioni insieme. Un esempio di tale serie di dichiarazioni è la creazione di un membro calcolato da usare nelle query successive.

In generale, le sessioni in XMLA seguono il comportamento seguente descritto dalla specifica OLE DB 2.6:

  • Le sessioni definiscono l'ambito del contesto di transazione e comando.

  • È possibile eseguire più comandi nel contesto di una singola sessione.

  • Il supporto per le transazioni nel contesto XMLA è tramite comandi specifici del provider inviati con il metodo Execute .

XMLA definisce un modo per supportare le sessioni in un ambiente Web in modalità simile all'approccio usato dal protocollo DAV (Distributed Authoring and Versioning) per implementare il blocco in un ambiente ad accoppiamento libero. Questa implementazione è parallela a DAV perché il provider può terminare le sessioni per vari motivi, come un timeout o un errore di connessione. Quando le sessioni sono supportate, i servizi Web devono essere consapevoli e pronti per gestire set interrotti di comandi che devono essere riavviati.

La specifica del Simple Object Access Protocol (SOAP) del Consorzio World Wide Web (W3C) consiglia di usare intestazioni SOAP per creare nuovi protocolli sui messaggi SOAP. Nella tabella seguente sono elencati gli elementi e gli attributi dell'intestazione SOAP definiti da XMLA per l'avvio, la gestione e la chiusura di una sessione.

Intestazione SOAP Description
BeginSession L'intestazione sollecita il provider di creare una nuova sessione. Il provider deve rispondere creando una nuova sessione e restituendo l'ID sessione come parte dell'intestazione Sessione nella risposta SOAP.
ID della sessione L'area del valore contiene l'ID sessione che deve essere usato in ogni chiamata al metodo per il resto della sessione. Il provider nella risposta SOAP invia questo tag e il client deve anche includere questo attributo in ogni elemento di intestazione di sessione.
Session Per ogni chiamata al metodo che si verifica nella sessione, è necessario usare questa intestazione e l'ID della sessione deve essere incluso nel campo valore dell'intestazione.
TerminaSessione Per terminare la sessione, usare questa intestazione HTTP. L'ID della sessione deve essere incluso nell'area valori.

Annotazioni

Un ID sessione non garantisce che una sessione rimanga valida. Se la sessione scade(ad esempio, se si verifica il timeout o la connessione viene persa), il provider può scegliere di terminare ed eseguire il rollback delle azioni della sessione. Di conseguenza, tutte le chiamate di metodo successive dal client in un ID sessione hanno esito negativo con un errore che segnala una sessione non valida. Un client deve gestire questa condizione e prepararsi a inviare nuovamente le chiamate al metodo di sessione dall'inizio.

Esempio di codice legacy

Nell'esempio seguente viene illustrato come sono supportate le sessioni.

  1. Per iniziare la sessione, aggiungere un'intestazione BeginSession in SOAP alla chiamata al metodo XMLA in uscita dal client. L'area del valore è inizialmente vuota perché l'ID sessione non è ancora noto.

    <SOAP-ENV:Envelope  
       xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"  
       SOAP-ENV:encodingStyle="http://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. Il messaggio di risposta SOAP dal provider include l'ID sessione nell'area dell'intestazione restituita, usando il tag header XMLA <SessionId>.

    <SOAP-ENV:Header>  
       <XA:Session  
          xmlns:XA="urn:schemas-microsoft-com:xml-analysis"  
          SessionId="581"/>  
    </SOAP-ENV:Header>  
    
  3. Per ogni chiamata al metodo nella sessione, è necessario aggiungere l'intestazione sessione contenente l'ID sessione restituito dal provider.

    <SOAP-ENV:Header>  
       <XA:Session  
          xmlns:XA="urn:schemas-microsoft-com:xml-analysis"  
          mustUnderstand="1"  
          SessionId="581"/>  
    </SOAP-ENV:Header>  
    
  4. Al termine della sessione, viene usato il <tag EndSession> contenente il valore dell'ID sessione correlato.

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

Vedere anche

Sviluppo con XMLA in Analysis Services