Управление соединениями и сеансами (XMLA)

Пользуясь — это условие, во время которого сервер сохраняет удостоверение и контекст клиента между вызовами методов. Стателесснесс — это условие, в течение которого сервер не запоминает удостоверение и контекст клиента после завершения вызова метода.

Чтобы обеспечить пользуясь, XML для аналитики (XMLA) поддерживает сеансы , которые позволяют выполнять несколько инструкций вместе. Примером такого ряда инструкций служит создание вычисляемого элемента, который должен использоваться в последующих запросах.

В целом поведение сеансов в XMLA соответствует описанию, приведенному в спецификации OLE DB 2.6.

  • Сеансы определяют область контекста команд и транзакций.

  • В контексте одного сеанса могут выполняться несколько команд.

  • Поддержка транзакций в контексте XMLA осуществляется с помощью команд, относящихся к поставщику, которые отправляются с помощью метода EXECUTE .

XMLA определяет способ поддержки сеансов в веб-среде, похожий на тот, который используется в протоколе DAV для реализации блокировки в слабосвязанной среде. Эта реализация соответствует протоколу DAV в том, что поставщик может закрывать сеансы по различным причинам (например, из-за ошибки времени ожидания или соединения). В случае поддержки сеансов веб-службы должны знать об этом и быть готовыми к обработке прерванных наборов команд, которые необходимо перезапускать.

В спецификации протокола SOAP консорциума World Wide Web (W3C) рекомендуется использовать заголовки SOAP для построения новых протоколов поверх сообщений SOAP. В приведенной далее таблице перечислены элементы и атрибуты заголовков SOAP, которые XMLA определяет для запуска, ведения и закрытия сеанса.

Заголовок SOAP Описание
BeginSession Этот заголовок запрашивает у поставщика создание нового сеанса. В ответ поставщик должен создать новый сеанс и возвратить его идентификатор, как часть заголовка Session в ответе SOAP.
SessionId Область значения содержит идентификатор сеанса, который необходимо использовать в каждом вызове метода в течение сеанса. В ответе SOAP поставщик отправляет этот тег, а клиент также должен отправлять этот атрибут с каждым элементом заголовка Session.
Сеанс Этот заголовок должен использоваться для каждого вызова метода в рамках данного сеанса, а на панели значения заголовка должен быть указан идентификатор сеанса.
EndSession Используйте этот заголовок для завершения сеанса. Идентификатор сеанса необходимо указывать в области значения.

Примечание

Наличие идентификатора сеанса не гарантирует того, что сеанс остается допустимым. Если время сеанса истекает (например, если истекло его время ожидания или потеряно соединение), поставщик может завершить и выполнить откат действий, выполнявшихся во время сеанса. В результате все последующие вызовы методов, отправленные клиентом с идентификатором сеанса, завершатся ошибкой, сигнализирующей, что сеанс недопустим. Клиент должен обработать это условие и быть готовым повторно отправить вызовы метода сеанса с самого начала.

Старый пример кода

В следующем примере показано, как поддерживаются сеансы.

  1. Чтобы начать сеанс, добавьте заголовок BeginSession в SOAP в исходящий от клиента вызов метода XMLA. Первоначально область значения остается пустой, поскольку идентификатор сеанса пока не известен.

    <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. Ответное сообщение SOAP от поставщика содержит идентификатор сеанса в области заголовка возврата с использованием тега < заголовка XMLA с кодом SessionID > .

    <SOAP-ENV:Header>  
       <XA:Session  
          xmlns:XA="urn:schemas-microsoft-com:xml-analysis"  
          SessionId="581"/>  
    </SOAP-ENV:Header>  
    
  3. В каждый вызов метода в рамках этого сеанса необходимо добавлять заголовок Session, содержащий идентификатор сеанса, который возвратил поставщик.

    <SOAP-ENV:Header>  
       <XA:Session  
          xmlns:XA="urn:schemas-microsoft-com:xml-analysis"  
          mustUnderstand="1"  
          SessionId="581"/>  
    </SOAP-ENV:Header>  
    
  4. По завершении < сеанса используется тег 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>  
    

См. также:

Разработка с использованием XMLA в службах Analysis Services