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.
Scarica

Advanced Web Services