Завершение сеанса 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>
Чтобы убедиться в том, что процесс прекращения сеанса завершен, клиентам обычно приходится проводить поиск подтверждающего ответа от сервера. Если в течение разумного промежутка времени подтверждение клиентом не получено, то клиенту следует повторить запрос на прекращение сеанса.