Anbindung von Silverlight an RESTful Web Services Sebastian Schmitt, SnipClip
Agenda <ul><li>Kurze Vorstellung von SnipClip </li></ul><ul><li>Was sind RESTful Web Services? </li></ul><ul><li>REST vs. ...
Kurze Vorstellung von SnipClip Sebastian Schmitt, SnipClip
Architektur von SnipClip Sebastian Schmitt, SnipClip Datenbank RESTful WCF Web Services Social Network (Facebook, MySpace)...
RESTful Web Services (1) <ul><li>REST =  Re presentational  S tate  T ransfer </li></ul><ul><li>„ Der Architekturstil des ...
RESTful Web Services (2) <ul><li>Adressierbarkeit:  Kommunikation erfolgt über Ressourcen, welche über URIs angesteuert we...
REST vs. SOAP Sebastian Schmitt, SnipClip REST SOAP Leichtgewichtig (Plain old XML)    weniger Traffic Schwergewichtig (W...
WCF REST Web Services(1) <ul><li>WCF REST Starter Kit installieren:  http://msdn.microsoft.com/en-us/netframework/cc950529...
WCF REST Web Services(2) <ul><li>Referenzen auf  System.ServiceModel.Web  (unter .NET) und  Microsoft.ServiceModel.Web  hi...
WCF REST Web Services(3) <ul><li>In der  web.config  den Knoten  system.ServiceModel  löschen </li></ul><ul><li>REST-Attri...
Silverlight    REST <ul><li>clientaccesspolicy.xml  im Web Service Verzeichnis ablegen </li></ul><ul><li>UploadStringAsyn...
Deserialisierung <ul><li>Deserialisierung der Antwort mit Hilfe der Klassen  MemoryStream  und  DataContractSerializer : M...
Serialisierung <ul><li>Daten werden über ein  byte -Array in einen „Plain old XML“ (POX) String serialisiert: MemoryStream...
Wiederverwendung der Business-Klassen <ul><li>Businessklassen können 1:1 aus dem Backend übernommen werden </li></ul><ul><...
Klassenhierachien und Enums <ul><li>Vererbung wird voll unterstützt </li></ul><ul><li>In der Eltern-Klasse müssen lediglic...
Zusammenfassung <ul><li>RESTful Web Services: </li></ul><ul><ul><li>Einstiegspunkt: WCF REST Starter Kit </li></ul></ul><u...
Kontaktdaten <ul><li>E-Mail: sebastian.schmitt@snipclip.com </li></ul><ul><li>Blog: www.paidcontentisback.com </li></ul><u...
Nächste SlideShare
Wird geladen in …5
×

Anbindung von Silverlight an RESTful Web Services

2.132 Aufrufe

Veröffentlicht am

Slides zum gleichnamigen Vortrag auf der WebTech Conference 2009 (16.11.2009 - 16h00)

Veröffentlicht in: Technologie
0 Kommentare
0 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Keine Downloads
Aufrufe
Aufrufe insgesamt
2.132
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
10
Aktionen
Geteilt
0
Downloads
5
Kommentare
0
Gefällt mir
0
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie
  • Social Game auf Facebook und MySpace Sammelspaß nach dem Vorbild der erfolgreichen Panini-Stickeralben Nutzer sammeln Videoschnipsel in vorgegebenen Alben, tauschen und wetteifern mit ihren Freunden
  • Anbindung von Silverlight an RESTful Web Services

    1. 1. Anbindung von Silverlight an RESTful Web Services Sebastian Schmitt, SnipClip
    2. 2. Agenda <ul><li>Kurze Vorstellung von SnipClip </li></ul><ul><li>Was sind RESTful Web Services? </li></ul><ul><li>REST vs. SOAP </li></ul><ul><li>RESTful Web Services in der WCF </li></ul><ul><li>Kommunikation Silverlight  REST Web Services </li></ul><ul><li>Serialisierung und Deserialisierung der Businessklassen </li></ul><ul><li>Wiederverwendung der Businessklassen </li></ul><ul><li>Abbildung von Klassenhierarchien und Enumeratoren </li></ul>Sebastian Schmitt, SnipClip
    3. 3. Kurze Vorstellung von SnipClip Sebastian Schmitt, SnipClip
    4. 4. Architektur von SnipClip Sebastian Schmitt, SnipClip Datenbank RESTful WCF Web Services Social Network (Facebook, MySpace) Silverlight Anwendung Plain old XML (POX) Plain old XML (POX) / JavaScript ADO.NET
    5. 5. RESTful Web Services (1) <ul><li>REST = Re presentational S tate T ransfer </li></ul><ul><li>„ Der Architekturstil des Internets“  Rückbesinnung auf grundlegenden Web-Technologien </li></ul><ul><li>URIs + HTTP </li></ul><ul><li>Keine zusätzliche Transportschicht (vgl. SOAP) </li></ul><ul><li>Keine Sitzungsverwaltung via Coockies </li></ul>Sebastian Schmitt, SnipClip
    6. 6. RESTful Web Services (2) <ul><li>Adressierbarkeit: Kommunikation erfolgt über Ressourcen, welche über URIs angesteuert werden  z.B. Nutzer: GET http://assets.snipclip.com/sebschmitt/ </li></ul><ul><li>Zustandslosigkeit: keine serverseitigen Zustände  der Zustand wird im Client (z.B. in Silverlight) verwaltet  hohe Skalierbarkeit der Web Services </li></ul><ul><li>4 Grundoperation: GET, POST, PUT, DELETE </li></ul><ul><li>Hypermedia: Ressourcen-Verknüpfung über Hyperlinks <friend> http://assets.snipclip.com/awussow/ </friend> </li></ul>Sebastian Schmitt, SnipClip
    7. 7. REST vs. SOAP Sebastian Schmitt, SnipClip REST SOAP Leichtgewichtig (Plain old XML)  weniger Traffic Schwergewichtig (WSDL)  Typechecking Flexibel: jeder Browser kann HTTP Bequem: Proxygenerierung durch Tools (sofern vorhanden) Menschenlesbar Anfragen und Antworten Automatische Einhaltung von Verträgen Firewall kann HTTP Nachrichten analysieren eingebaute Sicherheitskonzepte Caching leicht implementierbar Automatische Versionsunterstützung ... ...
    8. 8. WCF REST Web Services(1) <ul><li>WCF REST Starter Kit installieren: http://msdn.microsoft.com/en-us/netframework/cc950529.aspx </li></ul><ul><li>Libraries, Visual Studio Templates, Whitepapers, Tutorials  Ausgangspunkt für jeden WCF REST Web Service </li></ul><ul><li>WCF REST Projekt nach der Installation des Starter Kits in Visual Studio anlegen: Datei  Neues Projekt  Web  REST Collection WCF Service </li></ul><ul><li>Neuen WCF Service anlegen: Projekt  Neues Element hinzufügen  WCF Service (nicht unter Web zu finden!) </li></ul>Sebastian Schmitt, SnipClip
    9. 9. WCF REST Web Services(2) <ul><li>Referenzen auf System.ServiceModel.Web (unter .NET) und Microsoft.ServiceModel.Web hinzufügen (standardmäßig unter C:ProgrammeMicrosoft WCF RESTWCF REST Starter Kit Preview 2Assemblies) </li></ul><ul><li>In der Markup-Datei (.svc) die Klasse ServiceHostFactory mit AppServiceHostFactory überschreiben und als result eine Instanz von WebServiceHost2 zurück geben </li></ul><ul><li>AppServiceHostFactory registrieren: CodeBehind=&quot;UserService.svc.cs&quot; ersetzen durch Factory=&quot;UserService.AppServiceHostFactory&quot; </li></ul>Sebastian Schmitt, SnipClip
    10. 10. WCF REST Web Services(3) <ul><li>In der web.config den Knoten system.ServiceModel löschen </li></ul><ul><li>REST-Attribute im Interface verwenden: [WebGet(UriTemplate = &quot;{nickname}/&quot;, ResponseFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.Bare)] </li></ul><ul><li>Methoden implementieren </li></ul><ul><li>Service testen (z.B. mit Fiddler2) </li></ul>Sebastian Schmitt, SnipClip
    11. 11. Silverlight  REST <ul><li>clientaccesspolicy.xml im Web Service Verzeichnis ablegen </li></ul><ul><li>UploadStringAsync -Methode der Klasse WebClient verwenden </li></ul><ul><li>Content-Type -Header setzen, z.b. „application/xml“ </li></ul><ul><li>UploadStringAsync -Methode funktioniert nur mit „POST“  Eigentliche HTTP-Methode in zweitem Header mitgeben </li></ul><ul><li>In Web Service Markup Datei einen Interceptor hinzufügen, welcher den Header auswertet und die HTTP-Methode serverseitig überschreibt </li></ul>Sebastian Schmitt, SnipClip
    12. 12. Deserialisierung <ul><li>Deserialisierung der Antwort mit Hilfe der Klassen MemoryStream und DataContractSerializer : MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(e.Result)); DataContractSerializer deserializer = new DataContractSerializer(typeof(UserData)); UserData currentUser = (UserData)deserializer.ReadObject(stream); </li></ul>Sebastian Schmitt, SnipClip
    13. 13. Serialisierung <ul><li>Daten werden über ein byte -Array in einen „Plain old XML“ (POX) String serialisiert: MemoryStream memoryStream = new MemoryStream(); DataContractSerializer serializer = new DataContractSerializer(typeof(UserData)); serializer.WriteObject(memoryStream,currentUser); byte[] array = memoryStream.ToArray(); memoryStream.Close(); string poxData = Encoding.UTF8.GetString(array, 0, array.Length); userClient.UploadStringAsync(url, &quot;POST&quot;, poxData); </li></ul>Sebastian Schmitt, SnipClip
    14. 14. Wiederverwendung der Business-Klassen <ul><li>Businessklassen können 1:1 aus dem Backend übernommen werden </li></ul><ul><li>Man kann die Klassen jedoch nicht ohne weiteres in eine Library auslagern, da Silverlight nur Klassen aus Silverlight-Libraries erkennt  über Build-Scripts lässt sich das Kopieren automatisieren </li></ul>Sebastian Schmitt, SnipClip
    15. 15. Klassenhierachien und Enums <ul><li>Vererbung wird voll unterstützt </li></ul><ul><li>In der Eltern-Klasse müssen lediglich die potentiellen Kinder-Klassen über das Attribut KnownType angekündigt werden: [KnownType(typeof(FacebookID))] </li></ul><ul><li>Enumeratoren werden als DataContract mit Hilfe des Attributs „EnumMember“ deklariert: [DataContract(Name = &quot;social-network&quot;)] public enum SocialNetwork { [EnumMember] Facebook, [EnumMember] MySpace }; </li></ul>Sebastian Schmitt, SnipClip
    16. 16. Zusammenfassung <ul><li>RESTful Web Services: </li></ul><ul><ul><li>Einstiegspunkt: WCF REST Starter Kit </li></ul></ul><ul><ul><li>ServiceHostFactory überschreiben, web.config anpassen </li></ul></ul><ul><ul><li>REST-Attribute verwenden: [WebGet(UriTemplate … ] </li></ul></ul><ul><li>Silverlight Client: </li></ul><ul><ul><li>Via UploadStringAsync -Methode der Klasse WebClient </li></ul></ul><ul><ul><li>„ POST“ verwenden und im Header überschreiben </li></ul></ul><ul><ul><li>Deserialisierung: MemoryStream und DataContractSerializer </li></ul></ul><ul><ul><li>Serialisierung: POX-String über byte -Array erzeugen </li></ul></ul><ul><ul><li>Vererbung: [KnownType(typeof(FacebookID))] </li></ul></ul>Sebastian Schmitt, SnipClip
    17. 17. Kontaktdaten <ul><li>E-Mail: sebastian.schmitt@snipclip.com </li></ul><ul><li>Blog: www.paidcontentisback.com </li></ul><ul><li>Homepage: www.snipclip.com </li></ul><ul><li>Quellcode: www.snipclip.com/webtech09-REST.zip </li></ul>

    ×