具狀態 是伺服器在方法呼叫之間保留用戶端身分識別和內容的條件。 無狀態 是一種條件,在方法呼叫完成之後,伺服器不會記住用戶端的身分識別和內容。
為了提供具狀態性,XML for Analysis (XMLA) 支援允許一系列語句一起執行的 會話 。 這類語句的範例是建立要用於後續查詢的導出成員。
一般而言,XMLA 中的會話遵循 OLE DB 2.6 規格概述的下列行為:
會話會定義交易和命令內容範圍。
您可以在單一工作階段的內容中執行多個命令。
XMLA 內容中的交易支援是透過使用 Execute 方法傳送的提供者特定命令。
XMLA 會定義一種方法,以類似分散式撰寫和版本設定 (DAV) 通訊協定所使用的方法,在鬆散結合的環境中實作鎖定的模式中的 Web 環境中支援會話。 此實作會平行處理 DAV,讓提供者因為各種原因而讓會話過期(例如逾時或連線錯誤)。 支援會話時,Web 服務必須注意並準備好處理必須重新啟動的中斷命令集。
萬維網聯合會 (W3C) 簡單物件存取通訊協定 (SOAP) 規格建議使用 SOAP 標頭,在 SOAP 訊息之上建立新的通訊協定。 下表列出 XMLA 為起始、維護及關閉工作階段所定義的 SOAP 標頭元素和屬性。
| SOAP 標頭 | 說明 |
|---|---|
| BeginSession | 此標頭會要求提供者建立新的工作階段。 提供者應該藉由建構新的會話並傳回會話標識碼,作為SOAP回應中會話標頭的一部分來回應。 |
| SessionId(會話識別碼) | 值區域包含會話標識碼,這些標識碼必須用於會話其餘部分的每個方法呼叫中。 SOAP 回應中的提供者會傳送這個標記,客戶端也必須使用每個 Session 標頭元素傳送這個屬性。 |
| 會期 | 對於會話中發生的每個方法呼叫,必須使用此標頭,而且會話標識碼必須包含在標頭的值區域中。 |
| EndSession | 若要終止會話,請使用此標頭。 會話標識碼必須隨附於值區域。 |
備註
會話標識碼不保證會話保持有效。 如果會話過期(例如,如果逾時或連線遺失),提供者可以選擇結束並回復該會話的動作。 因此,會話標識碼上用戶端的所有後續方法呼叫都會失敗,並出現錯誤,表示會話無效。 客戶端應該處理此條件,並準備好從頭重新傳送會話方法呼叫。
舊版程式代碼範例
下列範例示範如何支援會話。
若要開始會話,請將SOAP中的BeginSession標頭新增至客戶端的輸出 XMLA 方法呼叫。 值區域一開始為空白,因為會話標識碼還不清楚。
<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>來自提供者的 SOAP 回應消息會使用 XMLA 標頭標記 <SessionId>,在傳回標頭區域中包含會話識別碼。
<SOAP-ENV:Header> <XA:Session xmlns:XA="urn:schemas-microsoft-com:xml-analysis" SessionId="581"/> </SOAP-ENV:Header>針對會話中的每個方法呼叫,必須新增會話標頭,其中包含從提供者傳回的會話標識符。
<SOAP-ENV:Header> <XA:Session xmlns:XA="urn:schemas-microsoft-com:xml-analysis" mustUnderstand="1" SessionId="581"/> </SOAP-ENV:Header>當會話完成時, <會使用 EndSession> 標記,其中包含相關的會話標識碼。
<SOAP-ENV:Header> <XA:EndSession xmlns:XA="urn:schemas-microsoft-com:xml-analysis" xsi:type="xsd:int" mustUnderstand="1" SessionId="581"/> </SOAP-ENV:Header>