Tsql теория > Резервирование пространства имен HTTP
14.02.2013 17:38:57
Наиболее часто встречающиеся слова в статье:
[пространства] [ENDPOINT] [пространство] [конечной] [Значение] [параметра] [учетной] [записью] [администратора] [Например]
Статья:
В будущей версии 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>
Правильное пространство имен для конечной точки можно определить на основе параметров инструкции 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 )