Резервирование пространства имен HTTP

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

Резервирование пространства имен HTTP для экземпляра SQL Server выполняется либо неявно, например при вызове инструкции CREATE ENDPOINT, либо явно хранимой процедурой sp_reserve_http_namespace.

Пространства имен URL-адресов резервируются по следующим причинам.

  • Приложение, которое запущено не под учетной записью администратора, нельзя привязать к пространству имен во время выполнения, если администратор его не зарезервировал. Это требование драйвера HTTP (Http.sys), работающего в режиме ядра.

    Единственным исключением из этого правила является приложение, запущенное под локальной системной учетной записью. Приложения, запущенные под учетной записью локальной системы, могут привязываться к любому свободному пространству имен. Даже если приложение выполняется под учетной записью локальной системы, пространства имен рекомендуется резервировать по следующим причинам.

  • Резервирование пространства имен гарантирует, что другие приложения не смогут привязаться к нему; другими словами, приложение является монопольным владельцем пространства имен.

    Например, если экземпляр SQL Server выполняется с учетной записью локальной системы, резервировать пространство имен не требуется, однако рекомендуется это сделать, чтобы избежать конфликтов приложений по URL-адресам.

Резервирование пространств имен осуществляется по иерархическому принципу. Например, вместе с пространством имен http://adventure-works.com:80/ резервируются все подпространства (http://adventure-works.com:80/sqlapp1 и http://adventure-works.com:80/sqlapp2/dir1).

ПримечаниеПримечание

Чтобы зарезервировать пространство имен HTTP при помощи драйвера HTTP (Http.sys), работающего в режиме ядра, требуются права доступа администратора Windows на локальном компьютере, где установлен экземпляр SQL Server.

Создание явного резервирования

Чтобы явно зарезервировать пространство имен URL-адресов, администратор, который хочет дать пользователям возможность выполнять инструкции языка DDL для конечных точек без обширных прав доступа на компьютере, может использовать хранимую процедуру sp_reserve_http_namespace.

Например, можно подключиться к экземпляру SQL Server, используя механизм проверки подлинности Windows, имя входа с правами администратора, и выполнить следующую процедуру.

sp_reserve_http_namespace N'http://MyServer:80/sql'
GO

Эта хранимая процедура явно резервирует указанное пространство имен, где MyServer — имя сервера, а 80 — номер порта. Эта процедура резервирует указанное пространство имен URL-адресов таким образом, чтобы последующие операции DDL в этом пространстве не требовали наличия прав администратора на данном компьютере. Пользователь, не имеющий прав администратора ни на каком компьютере, может выполнить инструкцию DDL конечной точки.

Например, пользователь может выполнить следующую инструкцию CREATE ENDPOINT.

CREATE ENDPOINT sql_endpoint 
STATE = STARTED
AS HTTP(
   PATH = '/sql/AdvWorks', 
   AUTHENTICATION = (INTEGRATED ), 
   PORTS = ( CLEAR ), 
   SITE = 'MyServer'
)
FOR SOAP (
    ...
)
GO

Инструкция конечной точки просто регистрирует /sql/AdvWorks в зарезервированном пространстве имен в HTTP.SYS. Клиентское приложение может послать конечной точке запрос SOAP, например запросив у сервера ответ WSDL.

http://MyServer/sql/AdvWorks?wsdl

Имя пространства имен, указанное в хранимой процедуре sp_reserve_http_namespace, должно иметь следующий вид.

<scheme>://<hostpart>[:<port>]/<RelativeURI>
  • scheme
    Можно использовать http или https.

  • hostpart
    Может быть именем конкретного узла или следующими символами-шаблонами: знак плюс (+) или звездочка (*).

    Знак плюс (+) означает, что операция резервирования применяется для всех возможных имен узлов компьютера для указанных параметров <scheme> и <port>.

    Знак звездочка (*) означает, что операция резервирования применяется для всех возможных имен узлов компьютера для параметров <scheme> и <port>, которые явно не зарезервированы процедурой sp_reserve_http_namespace, активными конечными точками или другими приложениями.

Определение пространства имен для конечной точки

Правильное пространство имен для конечной точки можно определить на основе параметров инструкции CREATE ENDPOINT.

Значение параметра PORTS в инструкции CREATE ENDPOINT определяет схему пространства имен, как показано в следующей таблице.

Значение конечной точки

Значение параметра <scheme>

CLEAR

http

SSL

https

n

http

Значение параметра CLEAR_PORT или SSL_PORT определяет номер порта (<port>) пространства имен.

Значение параметра PATH определяет <RelativeURI> пространства имен.

Значение параметра SITE определяет <hostpart> пространства имен.

Например, в следующем примере создается конечная точка с пространством имен http://testhost:80/sqlurl/myapp.

CREATE ENDPOINT ext_endpoint
    STATE = STARTED
AS HTTP (       
PATH = '/sqlurl/myapp'
, PORTS = CLEAR
, SITE = testhost
, CLEAR_PORT = 80 
)

В следующем примере создается конечная точка с пространством имен https://*:443/sqlurl/myapp.

CREATE ENDPOINT ext_endpoint
    STATE = STARTED
AS HTTP (       
PATH = '/sqlurl/myapp'
, PORTS = SSL
, SITE = '*'
, SSL_PORT = 443 
)

Примеры

В следующем примере администратор резервирует пространство имен в HTTP.SYS для соединения SSL. Таким образом, пользователь может создать конечную точку, указав для параметра PORT значение SSL.

sp_reserve_http_namespace N'https://MyServer:443/sql'