Impostazione del server per l'attesa delle richieste di servizi Web XML nativi

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

Per impostare un'istanza di SQL Server come servizio Web in grado di restare in attesa a livello nativo di richieste SOAP HTTP, è necessario creare un endpoint HTTP (spazio dei nomi URL) e definirne le proprietà nonché i metodi esposti.

Gli endpoint HTTP creati per l'utilizzo con SQL Server sono in grado di attendere e ricevere richieste attraverso la stessa porta TCP (porta 80) utilizzata da Microsoft Internet Information Services (IIS) per il servizio Web. Ciò può verificarsi in quanto ciascun URL, indipendentemente dal fatto che venga utilizzato da SQL Server o da IIS, viene registrato nel sistema operativo Windows Server 2003 per essere utilizzato nel listener HTTP di sistema (Http.sys).

Si supponga, ad esempio, che sia stato creato un endpoint con l'URL http://MyServer/My endpoint. Questo endpoint viene quindi registrato in Http.sys. Quando viene inviata una richiesta SOAP a questo endpoint, la richiesta viene innanzitutto inviata al server identificato nell'URL (MyServer). Al momento della ricezione della richiesta, il livello Http.sys sul server confronta la parte restante dell'URL con l'endpoint registrato e inoltra la richiesta direttamente all'istanza di SQL Server, ignorando IIS. Inoltre, utilizzando la console Gestione servizi Internet (Inetmgr.exe), è possibile creare una directory virtuale che equivale a un endpoint HTTP per IIS, con un URL diverso, ad esempio http://MyServer/MyVDir.

Creazione e gestione di endpoint

Per creare e gestire endpoint, utilizzare le istruzioni Transact-SQL riportate di seguito:

  • CREATE ENDPOINT

    Consente di creare endpoint, definire i metodi per i quali le applicazioni client possono inviare richieste SOAP HTTP all'endpoint, impostare l'autenticazione e specificare le porte.

  • ALTER ENDPOINT

    Consente di aggiungere, eliminare o modificare i metodi, nonché di modificare le opzioni degli endpoint.

  • DROP ENDPOINT

    Consente di eliminare gli endpoint indesiderati oppure obsoleti.

Autorizzazioni per gli endpoint e autenticazione

Per creare, modificare o eliminare endpoint HTTP è necessario disporre delle autorizzazioni appropriate. Per accedere agli endpoint è necessaria l'autenticazione. Tali requisiti sono descritti negli argomenti seguenti:

Programmabilità sul Web

Per esporre stored procedure o funzioni definite dall'utente, vedere l'argomento seguente:

Ambiente di esecuzione predefinito

Per impostazione predefinita, le richieste SOAP HTTP ai servizi Web XML nativi in SQL Server vengono eseguite in base alle impostazioni elencate nella tabella seguente.

  • SET ANSI_NULL_DFLT_ON ON
    Se l'opzione predefinita ANSI NULL per il database è impostata su FALSE, l'impostazione predefinita relativa al supporto dei valori Null delle nuove colonne viene sottoposta a override. Per ulteriori informazioni, vedere SET ANSI_NULL_DFLT_ON (Transact-SQL).

  • SET QUOTED_IDENTIFIER ON
    Gli identificatori possono essere racchiusi tra virgolette doppie, mentre i valori letterali devono essere racchiusi tra virgolette singole. Per ulteriori informazioni, vedere SET QUOTED_IDENTIFIER (Transact-SQL).

  • SET NUMERIC_ROUNDABORT OFF
    In seguito alla perdita di precisione non viene generato alcun messaggio di errore e il risultato viene arrotondato alla precisione della colonna o della variabile in cui viene archiviato. Per ulteriori informazioni, vedere SET NUMERIC_ROUNDABORT (Transact-SQL).

  • SET ARITHABORT ON
    Se durante l'esecuzione della query si verifica un errore di overflow oppure di divisione per zero, la query o il batch verrà terminato. Per ulteriori informazioni, vedere SET ARITHABORT (Transact-SQL).

  • SET ANSI_WARNINGS ON
    Se le funzioni di aggregazione, quali SUM o AVG, includono valori Null, viene generato un messaggio di avviso. Per ulteriori informazioni, vedere SET ANSI_WARNINGS (Transact-SQL).

  • SET ANSI_NULLS ON
    I confronti con un valore Null eseguiti mediante gli operatori uguale (=) e diverso da (<>) restituiscono FALSE. Per ulteriori informazioni, vedere SET ANSI_NULLS (Transact-SQL).

  • SET CONCAT_NULL_YIELDS_NULL ON
    La concatenazione di un valore Null con una stringa restituisce NULL. Per ulteriori informazioni, vedere SET CONCAT_NULL_YIELDS_NULL (Transact-SQL).

  • SET ANSI_PADDING ON
    Nelle colonne in cui sono archiviati valori di dimensioni inferiori rispetto a quelle definite della colonna, viene eseguito il riempimento. Nelle colonne con spazi vuoti finali nei dati char, varchar, binary e varbinary, gli spazi vuoti e gli zeri finali non vengono eliminati. Per ulteriori informazioni, vedere SET ANSI_PADDING (Transact-SQL).

  • SET CURSOR_CLOSE_ON_COMMIT ON
    Quando viene eseguito il commit o il rollback di una transazione, tutti i cursori aperti vengono chiusi. Per ulteriori informazioni, vedere SET CURSOR_CLOSE_ON_COMMIT (Transact-SQL).

  • SET IMPLICIT_TRANSACTIONS OFF
    Per impostazione predefinita, nelle sessioni SOAP HTTP le transazioni funzionano in modalità autocommit. In questa modalità viene eseguito il commit di tutte le singole istruzioni completate correttamente. Per ulteriori informazioni, vedere SET IMPLICIT_TRANSACTIONS (Transact-SQL).

Considerazioni sul failover del cluster per i servizi SOAP HTTP.

Durante l'installazione di SQL Server è consigliabile utilizzare un account di dominio come account del servizio SQL e accertarsi che l'account non disponga di diritti di amministrazione completi nel computer locale. Questa operazione implica alcune conseguenze quando un server SQL viene impostato come server virtuale in un cluster di Windows. Pertanto, è necessario considerare alcuni aspetti nella configurazione dei servizi nativi SOAP HTTP per SQL.

SQL Server sfrutta il driver HTTP di Windows Server 2003. Questo listener HTTP è progettato per eseguire il routing delle richieste a qualsiasi applicazione lo sottoscriva nella piattaforma Windows, inclusi i servizi SQL Server e IIS. Per sottoscrivere questo servizio, è necessario che le applicazioni chiamino le API HTTP per riservare l'URL radice specifico dell'applicazione, noto anche come spazio dei nomi. In base a questa prenotazione, il driver HTTP esegue il routing di tutte le richieste successive dall'URL specificato all'applicazione sottoscritta. La chiamata a tali API HTTP deve essere eseguita nel contesto di un account che disponga di diritti di amministratore di Windows locali. A partire da SQL Server 2005, tali chiamate vengono eseguite utilizzando una particolare stored procedure denominata sp_reserve_http_namespaces. Per ulteriori informazioni, vedere Prenotazione di uno spazio dei nomi HTTP. Questa stored procedure crea un'associazione tra l'URL radice e l'account del servizio SQL per il routing del driver HTTP di Windows. Se l'account del servizio SQL non dispone di diritti di amministratore sul computer locale, è necessario chiamare la stored procedure utilizzando invece un account amministratore locale di Windows. Una volta registrato questo spazio dei nomi, è possibile creare endpoint SOAP SQL con tale URL, in modo da reindirizzare le richieste HTTP successive. In una configurazione cluster, la prenotazione di questo spazio dei nomi HTTP deve essere stabilita da un amministratore Windows locale su ciascuno dei nodi. In tal modo è possibile garantire che il servizio HTTP continui a eseguire il routing delle richieste al server SQL qualora si verifichi un failover in uno qualsiasi dei nodi.

Un'altra considerazione relativa al failover del cluster con SQL Server e HTTP-SOAP riguarda l'utilizzo di certificati di crittografia per le richieste sul canale SSL. Per ulteriori informazioni, vedere Configurazione di un certificato per l'utilizzo con SSL. Anche in questo caso, in un ambiente cluster i certificati devono essere configurati su ciascun nodo. L'oggetto di questi certificati deve essere impostato come nome completo del nome del server virtuale. Per assicurarsi che l'autenticazione Kerberos tramite HTTP sia configurata, vedere Registrazione di nomi SPN Kerberos utilizzando Http.sys, valido anche per i cluster.