Condividi tramite


Creazione di un proxy del servizio Web XML

Questo argomento è specifico di una tecnologia legacy. Servizi Web XML e client di servizi Web XML devono essere creati attualmente tramite Windows Communication Foundation.

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 /protocol 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>
d2s8y7bs.note(it-it,VS.100).gifNota:
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.

Se si specifica un file, indicarne uno che contenga la descrizione del servizio. Di seguito è riportato un 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.

/language:linguaggio

Linguaggio utilizzato per generare la classe proxy. Le opzioni disponibili includono CS, VB e JS, che si riferiscono rispettivamente ai linguaggi C#, Visual Basic .NET e JScript .NET. Il linguaggio predefinito è C# (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:nomefile

Nome del file da creare che contiene la classe proxy. Il nome predefinito si basa sul nome della classe che implementa il servizio Web (facoltativo).

/username:nomeutente

Nome utente da utilizzare per la connessione a un server Web che richiede l'autenticazione (facoltativo)

/password:password

Password da utilizzare per la connessione a un server Web che richiede l'autenticazione. (facoltativo)

/dominio:domain

Dominio da utilizzare per la connessione a un server Web che richiede l'autenticazione. (facoltativo)

Dettagli per classi proxy generate

Quando viene utilizzato Wsdl.exe per generare una classe proxy, viene generato un solo file di origine nel linguaggio specificato. Tale file contiene una classe proxy che espone metodi sincroni e asincroni per ogni metodo del servizio Web. Se, ad esempio, un servizio Web contiene un metodo del servizio Web denominato Add, la classe proxy conterrà i metodi riportati di seguito 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 Add del servizio Web, mentre i metodi BeginAdd e EndAdd vengono utilizzati per comunicare in modo asincrono con un metodo del servizio Web. Per ulteriori informazioni su sulla comunicazione asincrona con i metodi del 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 ulteriori informazioni su 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 corrisponde. Se tuttavia il servizio Web prevede che il formato dei messaggi SOAP sia Document, esiste un caso in cui l'ordine dei parametri non corrisponde. Se in un metodo del servizio Web sono presenti parametri out definiti prima di un parametro in, i parametri out sono posizionati dopo tutti i parametri in nella classe proxy. Nell'esempio di codice seguente, ad esempio, il parametro out outStr del metodo del servizio Web MyWebMethod è stato 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 in una 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: verrà ignorata la descrizione del servizio duplicata con TargetNamespace =<spazionomi schema> dal percorso <URI schema>.

    Indica che TargetNamespace è identico per due o più descrizioni del servizio fornite. Poiché TargetNamespace è normalmente 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 compila 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 nella classe che implementa il servizio Web. Tale proprietà Namespace verrà in seguito utilizzata come TargetNamespace nella descrizione del servizio per identificare in maniera univoca il servizio Web.

  • Avviso: verrà ignorato lo schema duplicato con TargetNamespace =<Spazionomi schema> dal percorso <URI schema>.

    Indica che TargetNamespace è identico per due o più schemi XML all'interno delle descrizioni del servizio fornite. Poiché TargetNamespace è normalmente un identificatore univoco per un particolare documento XML, che in questo caso è lo schema XML, Wsdl.exe presuppone che i due schemi XML siano identici. Così facendo, Wsdl.exe compila una classe per uno solo degli schemi. Se questo non è il risultato desiderato, per ogni schema XML TargetNamespace deve essere impostato su un URI univoco. La modifica esatta di TargetNamespace dipende dall'origine degli schemi XML specifici.

Vedere anche

Attività

Procedura: esplorare i servizi Web XML esistenti creati tramite ASP.NET
Procedura: accedere ai servizi Web XML da un browser

Concetti

Compilazione 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