Reservando um namespace HTTP

Esse recurso será removido em uma versão futura do Microsoft SQL Server. Evite usar esse recurso em desenvolvimentos novos e planeje modificar os aplicativos que atualmente o utilizam.

A reserva de um namespace HTTP para ser usado com uma instância do SQL Server pode ser executada com uma reserva implícita, por exemplo ao usar CREATE ENDPOINT, ou uma reserva explícita usando o procedimento armazenado sp_reserve_http_namespace.

Namespaces de URL são reservados pelos motivos a seguir:

  • Se um aplicativo estiver sendo executado como uma conta de nonadministrator, ele não poderá se associar ao namespace em tempo de execução sem que um administrador reserve o namespace. Esse é um requisito do driver HTTP de modo de kernel (Http.sys).

    A única exceção a essa regra será se o aplicativo estiver sendo executado na conta de sistema local. Os aplicativos em execução na conta de sistema local podem se associar a qualquer namespace, contanto que ele esteja livre. Mesmo quando você está executando na conta de sistema local, é recomendável reservar os namespaces pelo seguinte motivo.

  • A reserva de um namespace garante que outros aplicativos não possam se associar a ele; por isso, o aplicativo tem propriedade exclusiva do namespace.

    Por exemplo, se uma instância do SQL Server estiver sendo executada na conta de sistema local, a reserva de namespaces não será necessária porém será recomendável para evitar conflitos de aplicativo nos URLs.

A reserva de namespaces segue uma hierarquia. Por exemplo, se o namespace http://adventure-works.com:80/ estiver reservado, todos os subnamespaces como http://adventure-works.com:80/sqlapp1 e http://adventure-works.com:80/sqlapp2/dir1 também estarão reservados.

ObservaçãoObservação

Para reservar um namespace HTTP usando o driver HTTP de modo kernel (Http.sys), é necessário ter privilégios administrativos do Windows no computador local em que a instância do SQL Server está instalada.

Criando uma reserva explícita

Para criar uma reserva explícita, um administrador que deseja que os usuários possam executar uma instrução DDL (linguagem de definição de dados) de ponto de extremidade sem exigir altos privilégios no computador pode reservar um namespace de URL usando o procedimento armazenado sp_reserve_http_namespace.

Por exemplo, você pode se conectar a uma instância do SQL Server usando a Autenticação do Windows, um logon que tenha privilégios de administrador e executar o seguinte:

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

O procedimento armazenado reserva explicitamente o namespace especificado, onde MyServer é o nome do servidor e 80 é o número da porta. Esse procedimento reserva o namespace de URL especificado de uma maneira que as operações de DDL subseqüentes no namespace não exijam privilégios de administrador no computador. Um usuário sem qualquer privilégio de administrador no computador pode executar a instrução DDL de ponto de extremidade.

Por exemplo, um usuário pode executar a instrução CREATE ENDPOINT a seguir:

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

A instrução de ponto de extremidade apenas registra o /sql/AdvWorks no namespace reservado em HTTP.SYS. Um aplicativo cliente pode enviar para o ponto de extremidade uma solicitação SOAP, por exemplo, solicitando uma resposta de WSDL do servidor:

http://MyServer/sql/AdvWorks?wsdl

O nome de namespace especificado no procedimento armazenado sp_reserve_http_namespace precisa ser do formulário:

<scheme>://<hostpart>[:<port>]/<RelativeURI>
  • scheme
    Pode ser http ou https.

  • hostpart
    Pode ser um nome de host específico ou os caracteres curinga a seguir: o sinal de mais (+) ou asterisco (*).

    O sinal de mais (+) sugere que a operação de reserva se aplica a todos os nomes de host possíveis do computador para o <esquema> e <porta> especificados.

    O asterisco (*) sugere que a operação de reserva se aplica a todos os nomes de host possíveis do computador para o <esquema> e <porta> que não estejam reservados explicitamente de outro modo, por exemplo, executando outros aplicativos, pontos de extremidade ativos ou operações de sp_reserve_http_namespace.

Identificando o namespace para um ponto de extremidade

Você pode identificar o namespace correto para um ponto de extremidade bom base nos parâmetros da instrução CREATE ENDPOINT.

O valor do parâmetro PORTS na instrução CREATE ENDPOINT determina o esquema para o namespace, conforme mostra a tabela a seguir:

Valor do ponto de extremidade

valor de <esquema>

CLEAR

http

SSL

https

n

http

O valor do parâmetro CLEAR_PORT ou SSL_PORT define o valor de <porta> do namespace

O valor do parâmetro PATH define o <URI_Relativo> do namespace.

O valor do parâmetro SITE define a <parte_host> do namespace.

Por exemplo, a instrução a seguir cria um ponto de extremidade que tem o namespace http://testhost:80/sqlurl/myapp.

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

A instrução a seguir cria um ponto de extremidade que tem o namespace https://*:443/sqlurl/myapp:

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

Exemplos

A seguir está outro exemplo em que o administrador reserva um namespace em HTTP.SYS para a conexão SSL. Portanto, um usuário pode criar pontos de extremidade onde PORT é definido como SSL.

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