Invio di richieste SOAP utilizzando il client di Visual Studio 2005 (C#)

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.

In questo argomento viene illustrata un'applicazione di esempio in cui un client di Visual Studio 2005 invia richieste SOAP a un'istanza di SQL Server ed elabora la risposta SOAP. Le richieste vengono inviate per i metodi dell'endpoint creati in Applicazioni di esempio per l'invio di richieste ai servizi Web XML nativi.

Per utilizzare questa applicazione, è consigliabile acquisire familiarità con le informazioni concettuali e procedurali incluse in Impostazione del server per l'attesa delle richieste di servizi Web XML nativi e Sviluppo di applicazioni client.

Nota

Per questa applicazione di esempio sono necessarie alcune operazioni di configurazione iniziali. Prima di continuare con l'applicazione di esempio, eseguire i passaggi illustrati in Applicazioni di esempio per l'invio di richieste ai servizi Web XML nativi.

Invio di richieste SOAP

In questa applicazione viene impostato un form con i pulsanti e le caselle di testo necessari per l'invio di richieste SOAP all'endpoint.

Quando viene inviata una richiesta SOAP per la stored procedure GetCustomerInfo, il valore per l'ID cliente indicato in una casella di testo viene passato come parametro di input. Se nella casella di testo non è specificato alcun valore, viene presunta una stringa vuota e vengono restituiti i clienti per i quali il valore di CustomerID è costituito da una stringa vuota. Se viene immesso NULL (null), vengono restituiti i clienti per i quali il valore di CustomerID è NULL. Si noti che, quando si verifica questa situazione, l'attributo xsi:nil = 'true' viene aggiunto automaticamente alla richiesta SOAP per indicare un valore di parametro NULL.

La stored procedure GetCustomerInfo è progettata per mostrare come gestire parametri di input e di output, messaggi di errore e risultati. Tramite l'applicazione vengono inoltre inviate richieste SOAP per la funzione definita dall'utente. Vengono inoltre inviate richieste SOAP per le query ad hoc seguenti:

  • Query SELECT per recuperare tutti i dipendenti.

  • Query SELECT per recuperare un dipendente il cui ID viene fornito come input.

Elaborazione delle risposte SOAP

Quando i risultati di una richiesta SOAP vengono restituiti come matrice di oggetti, l'applicazione client identifica il tipo di ogni oggetto nella matrice e lo elabora di conseguenza. Tramite l'applicazione vengono quindi visualizzate le informazioni seguenti su ogni elemento della matrice di oggetti:

  • Tipo di dati del valore nell'elemento della matrice.

  • Valore: set di risultati, codice restituito, valori dei parametri di output e così via.

Creazione di un esempio reale

A causa dei numerosi passaggi necessari per la creazione di questo esempio, l'applicazione viene suddivisa in cinque parti:

  • Parte 1: Esecuzione della stored procedure GetCustomerInfo

  • Parte 2: Esecuzione di SP

  • Parte 3: Esecuzione della query SQL senza parametri

  • Parte 4: Esecuzione della query SQL con parametri

  • Parte 5: Esecuzione della funzione definita dall'utente

In ogni parte è disponibile un set di istruzioni. Al termine di ogni parte, è possibile verificare l'applicazione.

Parte 1: Esecuzione della stored procedure GetCustomerInfo

  1. Nel computer client avviare Visual Studio 2005 dal gruppo di programmi Microsoft Visual Studio 2005.

  2. Fare clic su Nuovo progetto.

  3. Selezionare Progetti di Visual C# in Tipo progetto.

  4. Specificare NativeSOAPApp1 come nome del progetto.

  5. Specificare il percorso in cui si desidera salvare il progetto.

  6. Selezionare Applicazione Windows come modello e quindi fare clic su OK.

  7. Nella finestra Esplora soluzioni fare clic con il pulsante destro del mouse su Riferimenti e quindi scegliere Aggiungi riferimento Web. Un altro modo per aggiungere un riferimento Web consiste nello scegliere Aggiungi riferimento Web dal menu Progetto.

  8. Nella casella Indirizzo digitare https://Server/sql?wsdl e quindi premere INVIO. Si noti che nell'URL è necessario immettere il nome del server.

  9. Fare clic su Aggiungi riferimento. In questo modo vengono create le classi proxy necessarie per chiamare i metodi nel documento WSDL.

Parte 2: Esecuzione di SP

  1. Scegliere Casella degli strumenti dal menu Visualizza per aprire la casella degli strumenti nel riquadro [Progettazione] di Form1.cs. In alternativa, per aprire la casella degli strumenti premere CTRL+ALT+X.

  2. In Form1 aggiungere una casella di testo (textBox1), un pulsante (button1) e una casella di riepilogo (listBox1).

  3. Fare clic con il pulsante destro del mouse sulla casella di testo e quindi scegliere Proprietà. Modificare il valore di Text da textBox1 a 1. Si tratta del valore predefinito per l'lD cliente.

  4. Fare clic con il pulsante destro del mouse su button1 e quindi scegliere Proprietà.

    1. Modificare il valore della proprietà Text da button1 a ExecSP.

    2. Modificare il valore della proprietà (name) in ExecSP.

  5. Fare clic con il pulsante destro del mouse sulla casella di riepilogo (listBox1) e quindi scegliere Proprietà. Modificare il valore della proprietà HorizontalScrollbar in True.

  6. Fare doppio clic su ExecSP.

  7. Copiare il codice da Listato di codice C# per ExecSP nella funzione.

  8. Aggiornare il codice. Modificare i riferimenti a server dal nome host identificato al momento della creazione dell'endpoint tramite CREATE ENDPOINT.

  9. Salvare e compilare il progetto. Per ulteriori informazioni, vedere la sezione precedente "Compilazione del codice".

Parte 3: Esecuzione della query SQL senza parametri

Questa parte dell'applicazione client esegue una query ad hoc (query FOR XML) che recupera i dipendenti dalla tabella Employee nel database AdventureWorks2008R2.

  1. Nella scheda [Progettazione] di Form1 aggiungere un altro pulsante (button1).

  2. Fare clic con il pulsante destro del mouse sul nuovo pulsante e quindi scegliere Proprietà.

    1. Modificare il valore della proprietà Text da button1 a BatchQueryFindAllEmps.

    2. Modificare il valore della proprietà (name) in BatchQueryFindAllEmps.

  3. Fare doppio clic su BatchQueryFindAllEmps.

  4. Copiare il codice da Listato di codice C# per BatchQueryFindAllEmps nella funzione.

  5. Aggiornare il codice. Modificare i riferimenti a server dal nome host identificato al momento della creazione dell'endpoint tramite CREATE ENDPOINT.

  6. Salvare e compilare il progetto. Per ulteriori informazioni, vedere la sezione precedente "Compilazione del codice".

Parte 4: Esecuzione della query SQL con parametri

Questa parte è simile alla precedente, ad eccezione del fatto che la richiesta SOAP per la query ad hoc include un parametro di query. Tramite la query FOR XML vengono recuperate le informazioni relative al dipendente corrispondenti all'ID dipendente specificato.

  1. Nella scheda [Progettazione] di Form1 aggiungere un pulsante (button1).

  2. Fare clic con il pulsante destro del mouse sul nuovo pulsante e quindi scegliere Proprietà.

    1. Modificare il valore della proprietà Text da button1 a BatchQueryFindAnEmp.

    2. Modificare il valore della proprietà (name) in BatchQueryFindAnEmp.

  3. Fare doppio clic su BatchQueryFindAnEmp.

  4. Copiare il codice da Listato di codice C# per BatchQueryFindAnEmp nella funzione.

  5. Aggiornare il codice. Modificare i riferimenti a server dal nome host identificato al momento della creazione dell'endpoint tramite CREATE ENDPOINT.

  6. Salvare e compilare il progetto. Per ulteriori informazioni, vedere la sezione precedente "Compilazione del codice".

Parte 5: Esecuzione della funzione definita dall'utente

In questa parte l'applicazione client invia una richiesta SOAP per il metodo Web UDFReturningScalar. Il metodo Web corrisponde a una funzione definita dall'utente che restituisce un valore integer.

  1. Nella scheda [Progettazione] di Form1 aggiungere un pulsante (button1).

  2. Fare clic con il pulsante destro del mouse sul nuovo pulsante e quindi scegliere Proprietà.

    1. Modificare il valore della proprietà Text da button1 a ExecUDFReturningScalar.

    2. Modificare il valore della proprietà (name) in ExecUDFReturningScalar.

  3. Fare doppio clic su ExecUDFReturningScalar.

  4. Aggiungere il codice in Listato di codice C# per ExecUDFReturningScalar a questa funzione.

  5. Aggiornare il codice. Modificare i riferimenti a server dal nome host identificato al momento della creazione dell'endpoint tramite CREATE ENDPOINT.

  6. Salvare e compilare il progetto. Per ulteriori informazioni, vedere la sezione precedente "Compilazione del codice".

  7. Fare clic su ExecUDFReturningScalar. Il valore restituito dalla funzione definita dall'utente viene visualizzato nella casella di riepilogo.

Poiché tramite l'endpoint viene specificata l'autenticazione integrata, nel codice viene visualizzata la riga seguente:proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;.

Se si utilizza l'autenticazione di SQL Server, è consigliabile rimuovere questa riga e sostituirla con il codice che implementa intestazioni WS-Security per fornire credenziali di autenticazione basate su SQL Server. Per ulteriori informazioni, vedere Autenticazione di SQL Server tramite SOAP.

Nota

Se si utilizza l'autenticazione di SQL Server o l'autenticazione di base, in SQL Server è necessario utilizzare SSL (Secure Sockets Layer) per la trasmissione crittografata protetta delle credenziali utente, che altrimenti risulterebbero visibili come testo non crittografato. Per ulteriori informazioni sull'attivazione di SSL per l'utilizzo con endpoint HTTP, vedere Configurazione di un certificato per l'utilizzo con SSL.

Compilazione del codice

SQL Server installa .NET Framework 2.0 durante il processo di installazione. In queste istruzioni di compilazione viene utilizzata la versione più recente di .NET Framework, ovvero il numero più alto nella cartella \WINDOWS\Microsoft.NET\Framework.

Per compilare il codice di esempio

  1. Salvare l'intero progetto.

  2. Aprire il prompt dei comandi e individuare la cartella in cui è stato salvato il progetto.

  3. Copiare il file Reference.cs incluso nella sottocartella Web Reference\Server. Copiare, ad esempio, "Web Reference\Server\Reference.cs". I file Form1.cs e Reference.cs devono essere inclusi nella stessa cartella.

  4. Compilare il codice e specificare il nome del file eseguibile (exe). Se, ad esempio, il nome del file eseguibile è NativeSOAPApp1.exe, verrà visualizzata una riga di comando simile alla seguente:

    \WINDOWS\Microsoft.NET\Framework\v2.0.xxxxx\csc.exe /out:NativeSOAPApp1.exe Form1.cs Reference.cs

    xxxxx rappresenta il numero della cartella corrispondente alla versione di .NET Framework.

    In questo modo il file eseguibile, NativeSOAPApp1.exe, viene creato nella directory corrente.

Se si utilizza una versione precedente di .NET Framework, potrebbe venire visualizzato un errore di runtime. In tal caso, provare ad aggiornare la stored procedure GetCustomerInfo aggiungendo la clausola FOR XML AUTO alla fine dell'istruzione SELECT, come illustrato di seguito:

SELECT TOP 3 SalesOrderID, OrderDate 
FROM   SalesOrderHeader
WHERE  CustomerID = @CustomerID
FOR XML AUTO

I risultati dell'esecuzione della stored procedure vengono visualizzati nella casella di riepilogo.