Advanced Web Services Andrea Saltarello http://www.ugidotnet.org/4.blog UGIdotNET – http://www.ugidotnet.org Agenda User Defined Types vs. Web Services SOAP Header SOAP Exception WS Customization suburbia Web Services & UDT Premessa: si dice UDT, ma si legge struttura o classe Un Web Service può usare UDT: Liberamente, al suo interno Come tipo degli argomenti in ingresso o restituiti da un web method, se sono serializzabili dallo XML Serializer Serializzare?!? Per noi serializzare significa “rappresentare come XML” class ComplexNumber { public int r=5; public int i=7; } ComplexNumber x = new ComplexNumber(); <x> <r>5</r> <i>7</i> </x> WS e UDT… Pronti? Via! Definiamo il tipo ComplexNumber Implementiamo un Web Service che effettua calcoli su istanze di ComplexNumber Creiamo la classe proxy e consumiamo il Web Service Definire uno UDT: ComplexNumber Usare UDT mediante WS Creare la classe proxy Teletrasporto? Visual Studio .NET: Ha creato la classe proxy Ha “ricostruito” ComplexNumber Implementare il Client demo Web Services vs. UDT Abbiamo scoperto 2 cose: una è piacevole, l’altra un po’ meno. La classe ComplexNumber disponibile client-side: Espone gli attributi del tipo “originale” Non espone le operazioni del tipo originale (metodi/operatori) Espone le proprietà, ma solo se sono get/set Tutto ciò è normale? Si, perché… Web Services vs. UDT La struttura dei dati veicolati dal web service è definita nella sezione <types /> documento WSDL (cit.) Struttura significa dati, non significa codice. Il WSDL Colpisce Ancora! ™ Anatomia di un Web Method (Reprise) Anatomia di un Web Method (Reprise) demo Uno sguardo alla classe proxy SOAP Header: Overview I SOAP Header sono: Metadati associabili ad un envelope SOAP Elementi XML contenuti nella zona Header dell’envelope SOAP Utili per definire protocolli infrastrutturali (es: WSSecurity, WS-Transaction, …) Implementare Soap Header 1. 2. 3. 4. Derivare una classe da SoapHeader Aggiungere dei campi pubblici alla classe derivata da SoapHeader Usare la nuova classe per definire un campo pubblico del Web Service Decorare con l’attributo SoapHeader i metodi web che usano lo header Definire un SOAP Header Esporre un SOAP Header SOAPHeaderAttribute L’attributo SOAPHeader espone le proprietà: Direction: specifica la direzione dello header. Il valore di default è SoapHeaderDirection.In MemberName: specifica il membro della classe Web Service che riceve il valore dello header Required: specifica che lo header è obbligatorio Attenzione a… La proprietà Required: Restituisce una eccezione se il client non specifica lo header, senza entrare nel corpo del web method E’ marcata come Obsolete a partire dalla versione 1.1 del .NET Framework, e non più supportata SOAP Header vs. WSDL …e il Consumer? Il WSDL riflette i SOAP header utilizzati La classe proxy permette di valorizzare gli header SOAP mediante le sue proprietà SOAP Header: la classe proxy Valorizzare SOAP Header demo SOAP Header Overview Le eccezioni SOAP: Sono il meccanismo usato dai WS per comunicare al client eventuali errori Sono veicolate mediante l’elemento Fault contenuto nella sezione Body dell’envelope Un envelope SOAP può contenere un solo elemento Fault Lanciare eccezioni SOAP Le eccezioni sono gestibili mediante la classe SOAPException La classe SOAPException: Può essere utilizzata da un WS alla stregua di una normale classe xxxException Può essere estesa per creare nuove tipologie di eccezione Gestire eccezioni SOAP In caso di errore lato server, il client riceve: Una SOAPException, se l’errore avviene all’interno di un web method (il client è ignaro delle specializzazioni di SOAPException) Una WebException, se l’invocazione del WS fallisce demo SOAP Exception Configurare WS ASP .NET E’ possibile gestire la configurazione dei Web Services ASP .NET il file web.config Le modifiche sono specificate nell’elemento webServices contenuto in system.web Sono previste 2 categorie di configurazioni: Protocolli Welcome page <system.web> <webServices> <!-- Opzioni di configurazione --> <webServices> </system.web> Configurare i protocolli Elemento protocols contenuto in webServices, che può contenere: Elemento clear Annulla la configurazione attiva Elementi add Configura un protocollo Elementi remove Inibisce un protocollo <webServices> <protocols> <!-- Opzioni --> </protocols> </webServices> Configurare i protocolli Gli elementi add e remove hanno la struttura: <add name=“protocolname” /> I protocolli supportati sono: <webServices> HttpSoap <protocols> <clear /> HttpGet <add name=“HttpSoap” /> <remove name=“Documentation” /> HttpPost </protocols> HttpLocalhost </webServices> Documentation Welcome Page personalizzata L’elemento wsdlHelpGenerator contenuto in webServices permette di specificare quale pagina utilizzare in vece della Welcome Page La pagina è specificabile mediante l’attributo href dell’elemento wsdlHelpGenerator <webServices> <wsdlHelpGenerator href=“MiaPagina.aspx"/> </webServices> Welcome Page personalizzata L’attributo href specifica uno URL relativo a partire alla posizione del file web.config Si può usare come base di partenza quella di default, ossia: %WinDir%/Microsoft.NET\Framework\v1.x.xxxx\CONFIG\ DefaultWsdlHelpGenerator.aspx Link Web: http://msdn.microsoft.com/webservices/ http://www.ugidotnet.org/webservices.cnt Newsgroup: (news.microsoft.com) nntp://microsoft.public.it.dotnet.framework. webservices nntp://microsoft.public.it.dotnet.soap http://www.microsoft.com/italy/msdn/webcast/default.asp © 2003-2004 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.