Reservar un espacio de nombres HTTP

Esta característica se quitará en una versión futura de Microsoft SQL Server. Evite utilizar esta característica en nuevos trabajos de desarrollo y tenga previsto modificar las aplicaciones que actualmente la utilizan.

Para reservar un espacio de nombres HTTP y utilizarlo con una instancia de SQL Server, se puede efectuar una reserva implícita, como cuando se utiliza CREATE ENDPOINT, o una reserva explícita, con el procedimiento almacenado sp_reserve_http_namespace.

Los espacios de nombres de URL se reservan por los siguientes motivos:

  • Si una aplicación se ejecuta con una cuenta que no sea de administrador, no se puede enlazar al espacio de nombres en tiempo de ejecución sin que un administrador reserve el espacio de nombres. Es un requisito del controlador HTTP en modo kernel (Http.sys).

    La única excepción a esta regla se produce si la aplicación se ejecuta en la cuenta local del sistema. Las aplicaciones que se ejecutan en la cuenta local del sistema se pueden enlazar a cualquier espacio de nombres, siempre que esté libre. Aún en el caso de que realice la ejecución en la cuenta local del sistema, se recomienda reservar los espacios de nombres por el siguiente motivo.

  • La reserva de un espacio de nombres garantiza que las demás aplicaciones no puedan enlazarse a él; por tanto, la aplicación es la única propietaria del espacio de nombres.

    Por ejemplo, si se ejecuta una instancia de SQL Server en la cuenta del sistema local, no es preciso reservar espacios de nombres, pero sí se recomienda para evitar conflictos de aplicaciones en las direcciones URL.

La reserva de espacios de nombres es jerárquica. Por ejemplo, si el espacio de nombres http://adventure-works.com:80/ está reservado, también lo están los subespacios de nombres como http://adventure-works.com:80/sqlapp1 y http://adventure-works.com:80/sqlapp2/dir1.

Nota

Para reservar un espacio de nombres HTTP con el controlador HTTP de modo kernel (Http.sys) se necesitan privilegios de administrador de Windows en el equipo local donde está instalada la instancia de SQL Server.

Crear una reserva explícita

Para crear una reserva explícita, un administrador que desee que los usuarios puedan ejecutar una instrucción DDL (lenguaje de definición de datos) del extremo sin necesidad de privilegios superiores en el equipo, puede reservar un espacio de nombres de URL usando el procedimiento almacenado sp_reserve_http_namespace.

Por ejemplo, puede conectarse a una instancia de SQL Server mediante la autenticación de Windows, un inicio de sesión que cuenta con privilegios de administrador, y ejecutar lo siguiente:

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

El procedimiento almacenado reserva de forma explícita el espacio de nombres especificado, donde MyServer es el nombre del servidor y 80 el número de puerto. Este procedimiento reserva el espacio de nombres de URL especificado de modo que las operaciones de DDL posteriores en ese espacio de nombres no requieran privilegios de administrador en el equipo. Un usuario sin privilegios de administrador en el equipo puede ejecutar la instrucción DDL del extremo.

Por ejemplo, un usuario puede ejecutar la instrucción CREATE ENDPOINT siguiente:

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

La instrucción del extremo solo registra /sql/AdvWorks en el espacio de nombres reservado en HTTP.SYS. A continuación, una aplicación cliente puede enviar una solicitud SOAP, por ejemplo mediante la solicitud de una respuesta WSDL del servidor, al extremo:

http://MyServer/sql/AdvWorks?wsdl

El nombre del espacio de nombres especificado en el procedimiento almacenado sp_reserve_http_namespace debe tener el formato siguiente:

<scheme>://<hostpart>[:<port>]/<RelativeURI>
  • scheme
    Puede ser http o https.

  • hostpart
    Puede ser un nombre de host específico o los siguientes caracteres comodín: signo más (+) o asterisco (*).

    El signo más (+) implica que la operación de reserva se aplica a todos los nombres de host posibles del equipo en los valores <scheme> y <port> especificados.

    El asterisco (*) implica que la operación de reserva se aplica a todos los nombres de host posibles del equipo en los valores <scheme> y <port> no reservados explícitamente por otra operación, como la ejecución de otras operaciones sp_reserve_http_namespace, extremos activos u otras aplicaciones.

Identificar el espacio de nombres para un extremo

Puede identificar el espacio de nombres correcto para un extremo basándose en los parámetros de la instrucción CREATE ENDPOINT.

El valor del parámetro PORTS para la instrucción CREATE ENDPOINT determina el esquema del espacio de nombres, como se muestra en la siguiente tabla:

Valor del extremo

Valor <scheme>

CLEAR

http

SSL

https

n

http

El valor de los parámetros CLEAR_PORT o SSL_PORT establece el valor <port> del espacio de nombres.

El valor del parámetro PATH establece el valor <RelativeURI> del espacio de nombres.

El valor del parámetro SITE establece el valor <hostpart> del espacio de nombres.

Por ejemplo, la siguiente instrucción crea un extremo con el espacio de nombres http://testhost:80/sqlurl/myapp.

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

La siguiente instrucción crea un extremo con el espacio de nombres https://*:443/sqlurl/myapp:

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

Ejemplos

A continuación se incluye otro ejemplo en el que el administrador reserva un espacio de nombres en HTTP.SYS para la conexión SSL. Por tanto, un usuario puede crear extremos en los que PORT se establece en SSL.

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