Управление соединениями и сеансами (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 | Используйте этот заголовок для завершения сеанса. Идентификатор сеанса необходимо указывать в области значения. |
Примечание
Наличие идентификатора сеанса не гарантирует того, что сеанс остается допустимым. Если время сеанса истекает (например, если истекло его время ожидания или потеряно соединение), поставщик может завершить и выполнить откат действий, выполнявшихся во время сеанса. В результате все последующие вызовы методов, отправленные клиентом с идентификатором сеанса, завершатся ошибкой, сигнализирующей, что сеанс недопустим. Клиент должен обработать это условие и быть готовым повторно отправить вызовы метода сеанса с самого начала.
Старый пример кода
В следующем примере показано, как поддерживаются сеансы.
Чтобы начать сеанс, добавьте заголовок 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>
Ответное сообщение SOAP от поставщика содержит идентификатор сеанса в области заголовка возврата с использованием тега < заголовка XMLA с кодом SessionID > .
<SOAP-ENV:Header> <XA:Session xmlns:XA="urn:schemas-microsoft-com:xml-analysis" SessionId="581"/> </SOAP-ENV:Header>
В каждый вызов метода в рамках этого сеанса необходимо добавлять заголовок Session, содержащий идентификатор сеанса, который возвратил поставщик.
<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>
См. также:
Разработка с использованием XMLA в службах Analysis Services