Поделиться через


Завершение сеанса SOAP

В будущей версии Microsoft SQL Server эта возможность будет удалена. Избегайте использования этой возможности в новых разработках и запланируйте изменение существующих приложений, в которых она применяется.

Для завершения сеанса в запросе должен быть определен заголовок sqlSession с наборами атрибутов sessionId и terminate. Атрибут sessionId указывает на известный сеанс, когда сервер находится в доступном состоянии на сервере, и значение атрибута terminate должно равняться true.

Если сеанс с указанным идентификатором не существует, то с атрибутом terminate в заголовке sqlSession возвращается ошибка SOAP.

Если запрос выполняется в контексте безопасности или конечной точке, отличных от тех, которые инициировали сеанс, то возвращается ошибка SOAP, и сеанс остается неизмененным.

При явном завершении никаких новых запросов в текущем сеансе не принимается. Сеанс закрывается, когда завершается выполнение последнего пакета сеанса. Им должен быть не обязательно тот пакет, который запрашивал прекращение сеанса.

Примеры

В следующих примерах показывается завершение сеанса SOAP. Для завершения сеанса клиент SOAP отправляет запрос, подобный приведенным ниже, с известным и допустимым значением атрибута sessionId и атрибутом terminate со значением true:

<SOAP-ENV:Header  xmlns:SOAP-ENV="https://schemas.xmlsoap.org/soap/envelope/"  xmlns:sqloptions="https://schemas.microsoft.com/sqlserver/2004/SOAP/Options">    <!-- enlist in an existing session, and terminate it --><sqloptions:sqlSession terminate="true" sessionId="AAAAADreaLE="/></SOAP-ENV:Header>

Запросы на завершение сеанса могут быть пустыми или обладать текстом сообщения. Если присутствует текст, то заголовок атрибута terminate обрабатывается и подтверждается независимо от ошибок, которые могут возникнуть во время выполнения метода.

Затем сервер возвратит подтверждение, подобное приведенному ниже, указывающее на то, что сеанс завершен.

<SOAP-ENV:Header  xmlns:SOAP-ENV="https://schemas.xmlsoap.org/soap/envelope/"  xmlns:sqloptions="https://schemas.microsoft.com/sqlserver/2004/SOAP/Options">    <!-- response to terminating an existing session --><sqloptions:sqlSession terminate="true" sessionId="AAAAADreaLE="/></SOAP-ENV:Header>

Чтобы убедиться в том, что процесс прекращения сеанса завершен, клиентам обычно приходится проводить поиск подтверждающего ответа от сервера. Если в течение разумного промежутка времени подтверждение клиентом не получено, то клиенту следует повторить запрос на прекращение сеанса.