Creazione di un proxy del servizio Web XML
Per definizione, i servizi Web possono comunicare tra di loro attraverso una rete utilizzando protocolli industriali standard, incluso il protocollo SOAP. Ovvero, un client e un servizio Web comunicano utilizzando messaggi SOAP che incapsulano i parametri in entrata e uscita in linguaggio XML. Fortunatamente per i client del servizio Web, la classe proxy si occupa di eseguire il mapping dei parametri degli elementi XML e di inviare successivamente il messaggio SOAP in rete.
Fintantoché una descrizione del servizio esiste, può essere generata una classe proxy, a patto che la descrizione del servizio sia conforme al WSDL (Web Services Description Language). Una descrizione del servizio definisce come comunicare con un servizio Web. Con una descrizione del servizio, tramite lo strumento Wsdl.exe, può essere creata una classe proxy. Un client di servizio Web può richiamare quindi a sua volta metodi della classe proxy che comunicano con un servizio Web sulla rete elaborando i messaggi SOAP inviati da e verso il Servizio Web. Poiché la classe proxy comunica con il servizio Web attraverso Internet, è opportuno verificare che la proprietà URL della classe proxy faccia riferimento a una destinazione attendibile.
Per impostazione predefinita, la classe proxy utilizza il protocollo SOAP su HTTP per comunicare con il servizio Web. Tuttavia, Wsdl.exe può generare classi proxy per comunicare con un servizio Web, utilizzando il protocollo HTTP-GET o il protocollo HTTP-POST. Per specificare che la classe proxy deve utilizzare HTTP-GET o HTTP-POST, fornire l'opzione /protocollo allo strumento Wsdl.exe, come descritto nella tabella riportata di seguito.
Utilizzo di Wsdl.exe per generare una classe proxy del servizio Web XML
È possibile utilizzare lo strumento Wsdl.exe da un prompt dei comandi per creare una classe proxy, che specifichi (almeno) l'URL di un servizio Web, una descrizione del servizio o il percorso di una descrizione del servizio salvata.
Wsdl /language:language /protocol:protocol /namespace:myNameSpace /out:filename /username:username /password:password /domain:domain <url or path>
Nota: |
---|
Gli argomenti di seguito elencati sono quelli comunemente usati per Wsdl.exe. Per una descrizione completa della sintassi di Wsdl.exe, vedere Strumento del linguaggio di descrizione dei servizi Web (Wsdl.exe). |
Parametro | Valore |
---|---|
<Url o percorso> |
URL o percorso della descrizione di un servizio, ovvero un file che descrive un servizio Web in WSDL (Web Services Description Language). Se si specifica un file, fornire un file che contenga la descrizione del servizio. Ad esempio: mywebservice.wsdl Se si specifica un'URL, essa deve fare riferimento a una pagina .ASMX o deve restituire una descrizione del servizio. Per i servizi Web creati utilizzando ASP.NET, è possibile restituire una descrizione del servizio aggiungendo? WSDL all'URL del servizio Web. Ad esempio: https://www.contoso.com/MyWebService.asmx? WSDL |
/linguaggio:language |
Linguaggio in cui la classe proxy viene generata. Le opzioni disponibili includono CS, VBe JS, che si riferiscono rispettivamente a C#, Visual Basic .NET e JScript .NET. Il linguaggio predefinito è il CC#. (facoltativo) |
/protocollo:protocol |
Protocollo utilizzato per comunicare con i metodi di servizio Web. Le opzioni disponibili includono SOAP, HTTP-GET e HTTP-POST. Il protocollo predefinito è SOAP. (facoltativo) |
/spazio dei nomi:myNameSpace |
Lo spazio dei nomi del proxy generato. Il valore predefinito corrisponde allo spazio dei nomi globale. (facoltativo) |
/out:filename |
Nome del file da creare che contiene la classe proxy. Il nome predefinito si basa sul nome della classe di implementazione del servizio Web. (facoltativo) |
/nome utente:username |
Nome utente da utilizzare per il collegamento a un server Web che richiede l'autenticazione. (facoltativo) |
/password:password |
Password da utilizzare per il collegamento a un server Web che richiede l'autenticazione. (facoltativo) |
/dominio:domain |
Dominio da utilizzare per il collegamento a un server Web che richiede l'autenticazione. (facoltativo) |
Dettagli per classi proxy generate
Quando Wsdl.exe viene utilizzato per generare una classe proxy, viene generato un solo file di origine nel linguaggio specificato. Il file contiene una classe proxy che espone metodi sincroni e asincroni per ogni metodo di servizio Web del servizio Web. Se, ad esempio, un servizio Web contiene un metodo di servizio Web XML denominato Add
, la classe proxy conterrà i seguenti metodi per chiamare il metodo Add del servizio Web: Add
, BeginAdd
, e EndAdd
. Il metodo Add della classe proxy viene utilizzato per comunicare in modo sincrono con il metodo del servizio Web Add, ma i metodi BeginAdd
e EndAdd
vengono utilizzati per comunicare in modo asincrono con un metodo del servizio Web. Per ulteriori informazioni su come comunicare in modo asincrono con i metodi di servizio Web, vedere Comunicazione asincrona con i servizi Web XML.
Ogni metodo della classe proxy generata contiene il codice adatto per comunicare con il metodo del servizio Web. Se si verifica un errore durante la comunicazione con il servizio Web e la classe proxy, viene generata un'eccezione. Per maggiori dettagli sulla gestione delle eccezioni, vedere Gestione e generazione di eccezioni nei servizi Web XML.
Possono esserci differenze nell'ordine dei parametri tra l'ordine definito nel metodo del servizio Web e il metodo associato della classe proxy. Nella maggior parte dei casi, l'ordine dei parametri corrisponderà. Tuttavia, se il servizio Web si aspetta che i messaggi SOAP siano in formato Document, c'è un caso in cui l'ordine di parametri non corrisponderà. Se un metodo del servizio Web ha parametri out definiti prima di un parametro in, i parametri out sono posizionati dopo tutti i parametri in nella classe proxy. Ad esempio, nell'esempio di codice seguente il metodo del servizio Web MyWebMethod
ha il parametro out outStr
dichiarato prima del parametro in inStr
. Nella classe proxy, tuttavia, il parametro inStr
viene dichiarato prima di outStr
.
' Declare MyWebMethod in the Web service.
MyWebMethod(ByRef outStr As String, inStr As String)
' This is the corresponding MyWebMethod in the proxy class.
MyWebMethod(inStr As String, ByRef outStr As String)
// Declare MyWebMethod in the Web service.
MyWebMethod(out string outStr, string inStr)
// This is the corresponding MyWebMethod in the proxy class.
MyWebMethod(string inStr, out string outStr).
In alcuni casi, la classe proxy generata da WSDL.exe utilizza l'approccio del minimo comun denominatore per eseguire il cast di oggetti su un tipo specificato nella descrizione del servizio. Di conseguenza, il tipo generato nella classe proxy potrebbe non corrispondere alle previsioni o ai desideri dello sviluppatore. Quando ad esempio WSDL.exe rileva un tipo ArrayList in una descrizione del servizio, viene creata una matrice Object nella classe proxy generata. Per garantire il cast dell'oggetto su un tipo corretto, aprire il file contenente la classe proxy generata e modificare i tipi di oggetti non corretti nel tipo di oggetto previsto.
Avvisi generati da Wsdl.exe
Quando vengono fornite più descrizioni del servizio a Wsdl.exe, due dei messaggi di errore che potrebbero essere generati sono i seguenti:
Avviso: si sta ignorando la descrizione del servizio duplicata con TargetNamespace =<schema namespace> dal <percorso URI dello schema>.
Indica che ilTargetNamespace per due o più descrizioni del servizio fornite è identico. Poiché si suppone che il TargetNamespace sia un identificatore univoco per un particolare documento XML, che in questo caso è una descrizione del servizio, Wsdl.exe presuppone che le due descrizioni del servizio siano identiche. Così facendo, Wsdl.exe crea solo una classe proxy per una delle descrizioni del servizio. Se questo non è il risultato desiderato, è possibile modificarlo. Per descrizioni del servizio che rappresentano servizi Web creati utilizzando ASP.NET, è possibile applicare un attributo WebService che specifica una proprietà Namespace univoca per la classe che implementa il servizio Web. La proprietà Namespace viene in seguito utilizzata come TargetNamespace nella descrizione del servizio per identificare in modo univoco il servizio Web.
Avviso: si sta ignorando lo schema duplicato con TargetNamespace =<schema Namespace> dal < percorso URI dello schema>.
Indica che ilTargetNamespace per due o più schemi XML forniti è identico. Poiché si suppone che il TargetNamespace sia un identificatore univoco per un particolare documento XML che in questo caso è uno schema XML, Wsdl.exe presuppone che i due schemi XML siano identici. Così facendo, Wsdl.exe crea una classe per uno solo degli schemi. Se questo non è il risultato desiderato, per ogni schema XML il TargetNamespace deve essere impostato su un URI univoco. Il modo preciso in cui viene modificato il TargetNamespace dipende dall'origine degli schemi XML particolari.
Vedere anche
Attività
Procedura: Esplorare i servizi Web XML esistenti creati tramite ASP.NET
Procedura: Accesso ai servizi Web XML da un browser
Concetti
Creazione di client dei servizi Web XML
Individuazione Servizi Web
Comunicazione asincrona con i servizi Web XML
Altre risorse
Creazione di client di servizi Web XML
Copyright © 2007 Microsoft Corporation. Tutti i diritti riservati.