Работа с сеансами SOAP
В будущей версии Microsoft SQL Server эта возможность будет удалена. Избегайте использования этой возможности в новых разработках и запланируйте изменение существующих приложений, в которых она применяется.
Для выполнения запроса SOAP в контексте существующего сеанса необходимо указать следующие данные в запросе сеанса SOAP к серверу:
тот же самый идентификатор сеанса, который был ранее предоставлен сервером клиенту;
соответствующий идентификатор конечной точки HTTP для конечной точки, для которой сеанс SOAP был предварительно инициализирован;
тот же самый контекст пользователя; им является либо пользователь Windows, либо пользователь SQL Server, в зависимости от поддерживаемого значения LOGIN_TYPE в свойствах SOAP для конечной точки.
Если заданный идентификатор сеанса не существует или неверен, то элементом sqlSession возвращается сообщение о неудачном выполнении сеанса SOAP с атрибутом terminate в заголовке. В противном случае сервер возвращает заголовок sqlSession, который был послан клиентом в запросе.
Если запрос выполняется в другом контексте безопасности или в другой конечной точке, а не в той, в которой он был инициализирован, возвращается ошибка SOAP. В качестве ответа для завершения слоя SOAP будет задан код ошибки SOAP, и в заголовок sqlSession будет включен атрибут terminate со значением true.
Кроме этого, для предотвращения определения злоумышленниками того, что сеанс существует, задается атрибут terminate, и единственным откликом сервера на любой запрос, в котором сеанс, определенный для прикрепляющего объекта, неизвестен серверу, будет ошибка SOAP.
Примеры
Следующий пример показывает прикрепление сеанса SOAP. Здесь представлен формат сообщения SOAP, которое клиент посылает при запросе на прикрепление в существующем сеансе SOAP. Обратите внимание, что действительное значение sessionId будет идентификатором сеанса:
<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 --><sqloptions:sqlSession sessionId="AAAAADreaLE="/></SOAP-ENV:Header>
Сервер будет либо отсылать сообщение обратно клиенту с указанием того, что доступ к сеансу может быть получен, либо возвращать клиенту ошибку SOAP, если доступ к указанному в запросе сеансу не может быть получен.
См. также