4. Agenda
損 Silverlight ai minimi termini
E un plugin per il browser
Funziona sui pi湛 comuni browser
Funziona sui pi湛 comuni S.O.
Ha un supporto per il video molto efficace
Si programma con XAML e linguaggi evoluti (C#)
E una piattaforma per lo sviluppo di applicazioni
Una piattaforma per applicazioni online richiede un eccellente supporto
alla rete
Silverlight ha una serie di strumenti per laccesso alla rete molto evoluti e
di semplice utilizzo
27/02/2009 www.xedotnet.org 4
5. Introduzione
損 Architettura
Laccesso alla rete 竪 mediato dal browser che contiene il
plugin.
Il plugin perci嘆 non 竪 in grado di fare nulla di pi湛 di quello che
la sandbox del browser gli mette a disposizione
Questa scelta ha il vantaggio di condividere con il browser il
contesto
Caching
Autenticazione
Cookies
www.xedotnet.org 5
6. Introduzione
損 Limiti di HTTP
Supporto esclusivo a GET e POST
Header quasi completi, sia standard che custom
HttpStatus limitato a 200 e 404 (attenzione!)
Supporto al redirect solo su domini abilitati
www.xedotnet.org 6
7. Introduzione
損 Accesso solo a dominio di origine
La limitazione 竪 superabile ma con la collaborazione del
destinatario (cross-domain-policy)
Laccesso pu嘆 essere Cross-domain, Cross-scheme o Cross-Zone
(solo su Windows) e ci sono differenze tra le varianti
La ricerca del dominio si basa sullorigine dello XAP
Partecipano protocollo, dominio e porta
http://domain:port
https://domain:port
Il limite serve a evitare il sea surf (Cross Site Forgery)
www.xedotnet.org 7
8. Cross Domain Table
Classe Image, classe
MediaElement per
Classi WebClient e File dei tipi di
download progressivi File di origine XAML Flussi multimediali
HTTP carattere
(supporti, immagini,
ASX e cos狸 via)
Allowed schemes HTTP, HTTPS HTTP, HTTPS, FILE HTTP, HTTPS, FILE HTTP, HTTPS, FILE HTTP
Non consentito da
Cross-scheme access Non consentito Non consentito Non consentito No
HTTPS
Richiede un file dei
criteri di protezione. Consentito se diverso Consentito se diverso Consentito se diverso
Cross-domain access Non consentito
Non consentito per da HTTPS da HTTPS da HTTPS.
HTTPS.
Non consentito da Non consentito da Non consentito da Non consentito da Non consentito da
Cross-zone access (on
un'area Internet ad un'area Internet ad un'area Internet ad un'area Internet ad un'area Internet ad
Windows)
aree pi湛 restrittive. aree pi湛 restrittive. aree pi湛 restrittive. aree pi湛 restrittive. aree pi湛 restrittive.
Consentito allo stesso
sito e schema. Consentito alla stesso
Redirection allowed Consentito tra domini schema e a siti uguali Non consentito Non consentito Non consentito
solo con un file dei o diversi.
criteri di protezione.
www.xedotnet.org 8
9. Cross Site Forgery
損 Cross Site Forgery
Il client chiede una pagina
Nella pagine viene inserito un url malizioso (es. Immagine)
Lurl viene richiamato dal client inviando i cookie etc...
Se lutente casualmente si era autenticato ad un
sito privato lurl pu嘆 causare operazioni illecite
Gli uri devono essere esplicitamente
autorizzati con delle policy
www.xedotnet.org 9
10. Cross Domain Policies
損 Cross Domain Policies
Il plugin si aspetta che a fianco ai file scaricabili sia disponibile
un file di policy
clientaccesspolicy.xml
crossdomain.xml (compatibile flash)
Se non trova almeno un file di policy solleva uneccezione...
http://domain:port/downloads/file.xml
http://domain:port/clientaccesspolicy.xml
http://domain:port/crossdomain.xml
In caso di Servizi non IIS hosted e Socket occorre esporre un
metodo per leggere il file di policy
www.xedotnet.org 10
11. Cross Domain Policies
損 clientaccesspolicy.xml
<?xml version="1.0" encoding="utf-8"?>
<access-policy>
<cross-domain-access>
<policy>
<allow-from http-request-headers="*">
<domain uri="*" />
</allow-from>
<grant-to>
<resource path="/files.ashx" include-subpaths="false" />
</grant-to>
</policy>
</cross-domain-access>
</access-policy>
N.B: E bene specificare sempre le policy il pi湛 possibile restrittive soprattutto in grant-to
www.xedotnet.org 11
12. Programming Model
損 Programming Model
Laccesso alla rete da Silverlight 2.0 竪 esclusivamente
Asincrono
Il modello sincrono avrebbe causato problemi di freeze
del browser
La programmazione Asincrona complica un po il codice
Luso accorto di delegate e lambda expression consente
di semplificare di molto
www.xedotnet.org 12
13. Asyncronous Tip #1
損 Semplificare il codice
Nel framework 竪 presente la classe Action<T>
(parente di Func<T>)
Possiamo specificare dei delegate che eseguano
semplici operazioni in risposta
public DownloadFile(
int id,
Action<string> success,
Action<Exception> fail)
www.xedotnet.org 13
14. Asyncronous Tip #2
損 Thread Marshaling
La programmazione asincrona implica luso di Thread
Il rientro dalla callback avviene in un thread diverso da quello
della UI
Per evitare UnauthorizedAccessException bisogna fare il
marshaling
www.xedotnet.org 14
15. Asyncronous Tip #2
損 Tecniche di sincronizzazione
Uso di Dispatcher.BeginInvoke()
Richiede sempre un riferimento ad un UIElement
Uso problematico perch竪 non 竪 possibile verificare se si 竪 realmente in un
thread separato: In questo caso fallisce senza senza eccezioni
Uso di SynchronizationContext.Current
Ritorna null se si 竪 in un thread separato
Si pu嘆 usare solo allinterno del Thread della UI
Uso di AsyncOperationManager
Non necessita di un riferimento ad un UIElement
Utile per sincronizzare allinterno di classi di business prima di chiamare
un delegate o sollevare un evento.
www.xedotnet.org 15
16. HttpWebRequest
損 HttpWebRequest & HttpWebResponse
Utile per avere il massimo controllo sul protocollo.
Consente di forgiare la richiesta per esigenze speciali
Consente di specificare header e di fare upload di file
Attenzione: Richiede il marshaling del thread nella risposta
www.xedotnet.org 16
17. WebClient
損 WebClient
Si tratta della classe pi湛 comoda per fare download
E meno generica e ha dei metodi specifici per determinate
esigenze
DownloadStringAsync
OpenReadAsync
OpenWriteAsync
UploadStringAsync
Consente di specificare gli header
Consente di avere notifiche sul progredire del download
Non richiede sincronizzazioni di thread
www.xedotnet.org 17
18. WebServices
損 Accesso a Web Services
Si tratta sicuramente di uno dei metodi preferenziali per laccesso ai dati
Il proxy maschera il processo di comunicazione
La serializzazione/deserializzazione sono gi implementate
Per accedere a ASMX e WCF si deve usare BasicHttpBinding
Sono supportati CustomBinding e PollingDuplexHttpBinding
Non 竪 direttamente supportato WebHttpBinding ma lo si pu嘆 usare
mediante WebClient
Solo Trasporto HTTP (no binary)
Non richiede sincronizzazione di thread
www.xedotnet.org 18
19. WebServices
損 Supporto ai protocolli
Supporta solo WS-I Basic Profile 1.0 e in particolare SOAP 1.1
I principali protocolli WS-* non sono disponibili
WS-Security non 竪 direttamente supportato ma si possono iniettare gli
header manualmente
Luso di cookie e altri metodi di autenticazione 竪 gestito dal browser
Non 竪 possibile accedervi da Silverlight
Per questo 竪 sconsigliabile ospitare i servizi in-domain nel sito che li utilizza
www.xedotnet.org 19
20. WebServices
損 Serializzazione / Deserializzazione
Oggetti complessi come i DataSet non sono supportati. Se un
servizio li espone si deve manipolare direttamente lXML
Alcune classi particolarmente complesse (ad esempio quelle
che implementano ISerializable) potrebbero non essere
deserializzabili
www.xedotnet.org 20
21. ADO.NET Data Services
損 Accesso a Servizi REST
Silverlight supporta ADO.NET DataServices (gi Astoria)
Un DataService incapsula un modello ad oggetti di Entity
Framework oppure una propria classe
Grazie ad essi 竪 possibile usare LINQ nelle applicazioni
Siverlight
Il modello Asincrono complica un po le cose
C竪 qualche limite nella complessit dellObjectModel
www.xedotnet.org 21
22. ADO.NET Data Services
損 Cos竪 REST?
Indirizzo
Uri della risorsa cui si vuole accedere
Azione
Attivit da svolgere: GET, POST, PUT, DELETE
Rappresentazione
Modalit con cui si desidera accedere alla risorsa
(AtomPub o JSON)
www.xedotnet.org 22
23. Socket
損 Uso dei Socket
E utile in scenari dove si riceva un flusso di dati costante
E possibile per mezzo della classe Socket
E disponibile solo il protocollo TCP (no UDP)
Il set di porte va dalla 4502 alla 4534
Si usa un meccanismo a rilancio con SocketAsyncEventArgs
SocketAsyncEventArgs contiene lo stato attuale del socket quindi
ne deve essere usata una distinta per ogni Socket creato
www.xedotnet.org 23
24. Socket Server
損 Socket Server
Occorre gestire attraverso il canale la richiesta di
clientaccesspolicy.xml
Il client invia la richiesta <policy-file-request/>
Il file clientaccesspolicy.xml ha una apposita sezione
<policy>
<allow-from>
<domain uri="file:///" />
</allow-from>
<grant-to>
<socket-resource port="4502-4506" protocol="tcp" />
</grant-to>
</policy>
www.xedotnet.org 24
25. Polling Duplex
損 PollingDuplexHttpBinding
Il polling 竪 un metodo alternativo per raccogliere informazioni
che cambiano continuamente
Dalla Beta 2 竪 stato introdotto un nuovo binding in WCF per
supportare questo scenario
Il meccanismo implica luso di un Callback Contract
E nettamente pi湛 efficiente di un polling handmade
E un po complesso da configurare
www.xedotnet.org 25
26. Polling Duplex
損 Come funziona PollingDuplexHttpBinding?
In un polling classico il client 竪 sempre disconnesso salvo il tempo
necessario alla richiesta
Con il polling duplex il client 竪 sempre connesso salvo il tempo di
recuperare il timeout
Il server mantiene la connessione in uno stato di attesa fintanto
che non arriva qualcosa da inviare al client o il timeout
I vantaggi:
C竪 un solo processo di lavoro che notifica tutti i client
I client vengono aggiornati non appena il dato 竪 disponibile
Tutti i client sono sincronizzati
www.xedotnet.org 26
27. Polling Duplex
損 Callback Contract
Il duplex implementa Async Pattern
Il client deve esporre un proprio contratto che verr usato dal
server per notificare gli eventi
Il server usa lOperationContext per recuperare listanza del
contratto di callback e la memorizza
www.xedotnet.org 27
28. Polling Duplex
損 PollingDuplexHttpBinding Server
Il server 竪 molto complesso
Mantiene unanagrafica dei client connessi
Gestisce la concorrenza tra richieste e risposte
Gestisce il Fault dei canali per capire le disconnessioni
Lavora in background per decidere se notificare i client
Se non 竪 ospitato da IIS:
Implementa un ServiceHost
Implementa un metodo per restituire le policy
www.xedotnet.org 28
29. Consumare i dati
損 Deserializzazione XML
XamlReader
Utile per caricare on-demand pezzi di User Interface
XmlSerializer
Quando si deve caricare una gerarchia di oggetti completa
XDocument
Quando 竪 necessario accedere a pochi valori in un documento XML
Syndication
Quando si devono consumare feed RSS 2.0 o ATOM 1.0
27/02/2009 www.xedotnet.org 29
30. 損 JavaScript Object Notation
Se si ha bisogno di un flusso di dati molto compatto JSON 竪 lideale
System.Json
Usa una gerarchia di oggetti che rappresenta gli elementi della
notazione. Ha il difetto di non essere strong-typed
System.Runtime.Serialization.Json.DataContractJsonSerializer
Consente di serializzare/deserializzare un modello ad oggetti vero e
proprio
27/02/2009 www.xedotnet.org 30
33. Link
Andrea Boschin
Blog: http://blog.boschin.it
E-mail: andrea@boschin.it
Website: http://www.boschin.it
User group: http://www.xedotnet.org
www.xedotnet.org 33
In questo meeting sar mio incarico parlarvi di Silverlight 2.0, e in particolare di Networking. Non sar un meeting in cui parleremo diffusamente delle caratteristiche pi湛 sceniche di Silverlight, ma piuttosto cercher嘆 di essere molto pratico e arricchir嘆 spesso e volentieri il mio racconto di esempi di codice che vi chiariscano i concetti che esprimo. Cos竪 Silverlight in due parole? Silverlight 竪 un plugin per i pi湛 comuni browser, Ie, FF, safari e per le pi湛 comuni piattaforme, ma si connota pi湛 come una piattaforma per lo sviluppo di applicazioni che per semplici scene interattive. (vedere http://www.mscui.net/PatientJourneyDemonstrator/
Tre modi per accedere alla rete:XmlHttpRequest, API del browser, accesso diretto alle API di networking (bypass)