Prenotazione degli spazi dei nomi URL tramite Http.sys

Questa caratteristica verrà rimossa a partire da una delle prossime versioni di Microsoft SQL Server. Evitare di utilizzare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata.

È possibile prenotare in modo esplicito uno spazio dei nomi URL in HTTP.SYS e quindi utilizzarlo per creare endpoint HTTP. A tale scopo, è necessario acquisire i concetti di base della prenotazione implicita ed esplicita dello spazio dei nomi e conoscere la modalità di registrazione di un endpoint HTTP con HTTP.SYS utilizzata da SQL Server.

Prenotazione dello spazio dei nomi esplicita e implicita

Si supponga che un utente esegua l'istruzione CREATE ENDPOINT seguente:

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

Lo spazio dei nomi http://MyServer:80/sql/AdvWorks viene prenotato in modo implicito in HTTP.SYS. Ciò significa che, mentre l'applicazione basata su SQL Server è in esecuzione, le richieste HTTP inviate all'endpoint vengono inoltrate all'istanza di SQL Server. Può accadere tuttavia che questo spazio dei nomi venga utilizzato da altre applicazioni se l'istanza di SQL Server non è in esecuzione.

Quando si prenota in modo esplicito uno spazio dei nomi, tale spazio viene prenotato specificatamente per SQL Server e tutte le richieste HTTP inviate all'endpoint vengono inoltrate all'istanza di SQL Server. Per ulteriori informazioni, vedere Prenotazione di uno spazio dei nomi HTTP.

[!NOTA]

Visual Studio 2005 e Http.sys rispettano regole diverse per quanto riguarda la forma canonica degli URL. Ad esempio, Http.sys accetta un carattere jolly inclusivo come parte dell'impostazione PATH, ad esempio "/SQL/Percorso/...", quando viene creato un endpoint. Le regole di Visual Studio 2005 sono più rigide e le informazioni "..." vengono rimosse prima della trasmissione dell'URL.

Registrazione dell'endpoint in SQL Server

Per gestire gli endpoint HTTP, è possibile utilizzare CREATE ENDPOINT, ALTER ENDPOINT e DROP ENDPOINT. È necessario disporre delle autorizzazioni appropriate per la creazione, la modifica o la rimozione di un endpoint. Per ulteriori informazioni, vedere l'argomento GRANT - autorizzazioni per endpoint (Transact-SQL).

Quando si esegue CREATE ENDPOINT per creare un endpoint, SQL Server esegue l'istruzione e registra l'endpoint con HTTP.SYS. A seconda del contesto nel quale viene specificata l'istruzione per l'endpoint, SQL Server rappresenta il chiamante nei modi seguenti:

  • Se si esegue l'istruzione nel contesto di un account di Windows, SQL Server rappresenta il chiamante per la registrazione dell'endpoint con HTTP.SYS.

  • Se si esegue l'istruzione nel contesto di un account di SQL Server, ad esempio sa o un altro account di accesso di SQL Server, SQL Server rappresenta il chiamante utilizzando l'account di SQL Server specificato durante l'installazione di SQL Server, per registrare l'endpoint con HTTP.SYS.

L'account di Windows e l'account di SQL Server rappresentati da SQL Server devono entrambi disporre dei privilegi amministrativi di Windows locali affinché la registrazione dell'endpoint HTTP abbia esito positivo.

Verifica delle prenotazioni dello spazio dei nomi HTTP

Per determinare quali spazi dei nomi sono prenotati in HTTP.SYS, è possibile eseguire l'utilità di configurazione HTTP, Httpcfg.exe, al prompt dei comandi.

[!NOTA]

Httpcfg.exe viene installato con gli strumenti di supporto di Windows Server. Per ulteriori informazioni, vedere Configurazione del driver HTTP in modalità kernel (Http.sys).

Nell'esempio seguente Httpcfg.exe viene utilizzato per restituire l'elenco degli spazi dei nomi HTTP prenotati:

httpcfg query urlacl

Il comando visualizza l'elenco delle prenotazioni degli spazi dei nomi e restituisce l'URL dello spazio dei nomi e l'account con cui è stato prenotato.

Di seguito è riportato l'output che viene in genere restituito dal comando:

URL: http://adventure-works.com:80/sql/
ACL : D:(A;;GA;;;S-1-5-21-123456789-1234567890-1262470759-1010)
-----------------------------------------------------------------
URL : https://adventure-works.com:443/sql/
ACL : D:(A;;GA;;;NS)
-----------------------------------------------------------------

[!NOTA]

Questa procedura può essere eseguita unicamente dai membri del ruolo sysadmin e per eseguirla è necessario che l'account di rappresentazione disponga di privilegi amministrativi nel computer.