1 / 46

Working with Data and Web Services in Silverlight 2

Working with Data and Web Services in Silverlight 2. Gill Cleeren Microsoft Regional Director Microsoft MVP ASP.NET Ordina Belgium www.snowball.be - www.codeflakes.net gill.cleeren@ordina.be. Get to know the audience …. Is this Silverlight?. Agenda. Introduction

Download Presentation

Working with Data and Web Services in Silverlight 2

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Working with Data and Web Servicesin Silverlight 2 Gill Cleeren Microsoft Regional Director Microsoft MVP ASP.NET Ordina Belgium www.snowball.be - www.codeflakes.net gill.cleeren@ordina.be

  2. Get to know the audience… Is this Silverlight?

  3. Agenda Introduction Building ourfirst Silverlight/WCF application Services thatdescribethemselves Services thatdon’tdescribethemselves Accessing RSS/Atomfeeds Summary

  4. Applications interact with the outside world Product catalog Productdatabase Search string Product information

  5. Many Types of Outside Data ImagesSoundsVideos RSS/AtomFeeds New servicesyou build In-Browser Application ExistingIntranetservices PublicInternetmashup APIs

  6. A Bit of History: Silverlight 1.0 ImagesSoundsVideos RSS/AtomFeeds <XAML/> 1.0 New servicesyou build ? ExistingIntranetservices JavaScript PublicInternetmashup APIs AJAX (XmlHttpRequest) HTML

  7. The Story Today: Silverlight 2 ImagesSoundsVideos RSS/AtomFeeds 2 New servicesyou build Managed Code (C#/VB) ExistingIntranetservices PublicInternetmashup APIs HTML

  8. Question 1:What does the client code look like? 2 Managed Code (C#/VB)

  9. Question 2:What is the recommended way to create services for Silverlight? New servicesyou build

  10. Using a Custom Service from Silverlight DEMO Productdatabase Service

  11. Recap: Required Steps WCFService • 1. Create the Service • 2. Define what it does • 3. “Add Service Reference” • 4. Use the Service!

  12. Creating a Service for Silverlight “Add New Item” (in Web Site / Web App) “Silverlight-Enabled WCF Service” Temporary for Beta1: “Add New Item”  “WCF Service” Change wsHttpBinding  basicHttpBinding in config basicHttpBinding <endpoint contract=“IShoppingService” binding=“wsHttpBinding”…>

  13. Defining the Contract • [ServiceContract] for the service class (interface in Beta1) • [OperationContract] for methods (in the interface in Beta1) • [DataContract]/[DataMember] for data types • [ServiceContract] • public class ShoppingService{ • [OperationContract] • Product[] GetProducts(string searchString) { /*... Implementation ... */ }} • [DataContract] • public class Product{ • [DataMember] • public string description; • [DataMember] • public string pictureUrl; • } Nothing Silverlight-specificRegular WCF code!

  14. Adding a Reference In the Silverlight project: “Add Service Reference” “Discover” button will find services in solution Can also give external URL

  15. Creating the Proxy var proxy = new ShoppingServiceClient(); Default address chosen if no parameters given Can pass in address manually But what if the service moves? • Configuration support after Beta1 • No need to recompile Silverlight client code if service moves • Can reuse one Silverlight app for many services

  16. Making the Call Only asynchronous calls supported • Set up GetProductsCompletedevent • “Tab,Tab” in Visual Studio • Call GetProductsAsync var proxy = newShoppingServiceClient(); proxy.GetProductsCompleted += newEventHandler<GetProductsCompletedEventArgs>(proxy_GetProductsCompleted); proxy.GetProductsAsync(“book”); void proxy_GetProductsCompleted(object sender, GetProductsCompletedEventArgs e) { // Process response… }

  17. Data Binding to Services All generated types/collections support data binding Future Possibility: Advanced data binding to services (XAML-only)E.g. <GetProductsDataSource />

  18. What we covered so far… ImagesSoundsVideos RSS/AtomFeeds 2 New servicesyou build ExistingIntranetservices But what about the client code for other service types? PublicInternetmashup APIs

  19. Approach #1:"Add Service Reference" Metadata-driven, with Intellisense

  20. Services that describe themselves Services for your Silverlightproject SOAPservices in the enterprise WCF SOAP services on the Internet Automatic Proxy Generation Computer-ReadableMetadata (e.g. WSDL) SQL Server Data Services*(Astoria)

  21. Demo:Accessing the Live Search APIfrom Silverlight in an automatic way

  22. Add Service Reference Works with: • Any “simple” SOAP service (e.g. Live Search) • SOAP 1.1 • Server-side may be JAVA, WCF, ASMX, etc. • A few restrictions (e.g. SOAP Faults not supported) • Future Possibility: SQL Server Data Services (Astoria) Can’t talk to just any service: Silverlight-Wide Cross-Domain Restrictions…

  23. Cross-Domain Restrictions Silverlight does not allow applications to cross domain boundaries by default: • MySite.com/silverlightApplication.xap cannot call SomeOtherSite.com/someService.svc • SecurityException if you try Silverlightallows the calls if target site opts in • How do services opt in? • When should services opt-in?

  24. Cross-Domain Policy Files Silverlight looks for two policy files: • Silverlight policy: clientaccesspolicy.xml • Adobe Flash policy: crossdomain.xml • Already used by All public services that work with Flash will also work with Silverlight!

  25. Cross-DomainPolicy Files <?xml version="1.0" ?> <cross-domain-policy> <allow-access-from domain="*" /> </cross-domain-policy> <?xml version="1.0" encoding="utf-8" ?> <access-policy> <cross-domain-access> <policy> <allow-from> <domain uri="*" /> </allow-from> <grant-to> <resource path="/" include-subpaths="true" /> </grant-to> </policy> </cross-domain-access> </access-policy>

  26. Approach #2:Write the Code Manually “A service call is just an HTTP request”

  27. Human-Readable Documentation Only

  28. Services that don’t describe themselves “Mashup APIs” “Web APIs” REST Services “POX” (Plain Old XML) services Some Manual Work Required Human-ReadableDocumentation JSON Services 1. Build a URL 2. Make a request 3. Work with request/response data (XML or JSON)

  29. Demo:Accessing Flickr from Silverlight

  30. Manually Issuing Requests Code was exactly as in the regular .NET Framework!Good news for existing .NET developers Some Silverlight-specific things to be aware of…

  31. Manually Issuing Requests • Build a URL • What are the allowed protocols? • Where can I connect to? • Make a Request • How do I make a request? • Working with Request/Response Data • How do I work with XML? • How do I work with JSON?

  32. Manually Issuing Requests • Build a URL • What are the allowed protocols? • Where can I connect to? • Make a Request • How do I make a request? • Working with Request/Response Data • How do I work with XML? • How do I work with JSON?

  33. Allowed URLs HTTP and HTTPS • Some restrictions on HTTPS, cross-scheme • A few of these will go away after Beta1 Subject to cross-domain rules • Must have policy file if not local URL No ftp:// or file:// URLs

  34. Manually Issuing Requests Build a URL • What are the allowed protocols? • Where can I connect to? Make a Request • How do I make a request? Working with Request/Response Data • How do I work with XML? • How do I work with JSON?

  35. Making HTTP Requests WebClient • Simple to use • Limited functionality HttpWebRequest • Access to all features

  36. Manually Issuing Requests Build a URL • What are the allowed protocols? • Where can I connect to? Make a Request • How do I make a request? Working with Request/Response Data • How do I work with XML? • How do I work with JSON?

  37. Working with XML XmlReader/XmlWriter Linq to XML XmlSerializer static void w_DownloadStringCompleted(object sender DownloadStringCompletedEventArgs e) { XElement x = XElement.Parse(e.Result); foreach (photo in x.Elements("photo")) { //... } }

  38. The JSON Data Format “JavaScript Object Notation” • Easy and fast to parse in JavaScript in browsers Often no real reason to use it for SL, except… • Reusing existing services built for AJAX pages • Smaller message size (but binary XML is a future possibility) Example: {“Person”:{“name”:”john”,”age”:42}}

  39. Approach #3:Use Built-In Classes … for RSS/Atom feeds

  40. Consuming Feeds RSS 2.0 Feeds Atom 1.0 Feeds Built-in classes to work withsuch services Conform to a Standard AtomPublishing (Future?) SyndicationFeed feed = SyndicationFeed.Load(…) foreach (SyndicationItem item in feed) { //Do something with item }

  41. Demo: Accessing my blogs RSS feeds from Silverlight

  42. Syndication Support in Silverlight Protocols • RSS 2.0, Atom 1.0 • Future possibility: Atom Publishing Protocol Essentially the same as in .NET 3.5 • SyndicationFeed, SyndicationItem, etc. • Can read / write feeds Subject to same cross-domain restrictions, etc. Use HttpWebRequest/WebClient, then Syndication to parse

  43. Summary: What We Covered Creating Services for Silverlight • Creating and consuming WCF services • Securing local services • Creating public services (safe for cross-domain) Accessing Services that Describe Themselves • “Add Service Reference” Accessing Services that Don’t Describe Themselves • WebClient / HttpWebRequest, manual work Accessing Feeds • RSS/Atom

  44. Resources Silverlight: www.silverlight.net silverlight.net/blogs/jesseliberty/ timheuer.com/blog/ www.silverlightcream.com Personal blogs: www.snowball.be www.codeflakes.net Email: gill.cleeren@ordina.be

  45. Q&(maybe)A

  46. Thankyou! Gill Cleeren Microsoft Regional Director Microsoft MVP ASP.NET Ordina Belgium www.snowball.be - www.codeflakes.net gill.cleeren@ordina.be

More Related