Windows 8 Apps and the Outside World


Published on

Presented by Gill Cleeren.

1 Like
  • Be the first to comment

No Downloads
Total views
On SlideShare
From Embeds
Number of Embeds
Embeds 0
No embeds

No notes for slide

Windows 8 Apps and the Outside World

  1. 1. Windows 8 apps and the outside worldGill CleerenMicrosoft Regional Director & MVPTelerik MVP
  2. 2. About myself...• Gill Cleeren• .NET Architect @Ordina (• Microsoft Regional Director• Silverlight MVP• Speaker (TechDays, TechEd, DevReach, DevDays, NDC Norway, Telerik Usergroup tours...)• Visug user group lead (• Author: • Silverlight 4 Data and services cookbook • Silverlight 5 Data and services cookbook• Blog:• Email:• Twitter: @gillcleeren
  3. 3. Silverlight 5 Data and ServicesCookbook available!• Updated for Silverlight 5• Over 115 recipes (that’s 30 extra!)• Extended to about 700 pages • (That’s 250 extra!)• Covering WP7, MVVM, RIA Services and much more!• More info:
  4. 4. Agenda• Accessing data behind a service• Working with WCF and ASMX services• Working with REST services• Accessing oData services• Syndication with RSS• Background transfers• Tiles interactions • Periodic tile updates • Push notifications• Authenticating with Twitter and Facebook using the WebAuthBroker• Using the Live SDK in your Windows 8 apps• Using roaming data in your applications• Working with sockets • TCP sockets • WebSockets
  5. 5. What we aren’t covering today• ControlChannelTrigger• Raw notifications• Azure
  6. 6. Accessing data behinda service
  7. 7. Working with services to accessdata• Service communication is always done asynchronous • In Silverlight, this was done using a callback • In C#5, we got the async/await keywords • Fully supported in Metro/WinRT development • await keyword makes things easier • Doesn’t block UI thread • Doesn’t require the ugly Dispatcher.BeginInvoke(() => …);• Getting data in a Metro application is a 3-step process • Calling the service asynchronous • Receiving and parsing the data • Using the data, for example in a data-binding scenario
  8. 8. Working with services to accessdata• Working with services is preferred in most cases • Relational databases should be behind a service • Local app storage • App has its own storage directory • Can access local file system • Not the focus of this talk!
  9. 9. Working with services• Windows 8 supports all kinds of services • ASMX • WCF • REST (JSON or XML) • RSS (later in this talk) • Sockets (much later in this talk) • oData services (you get the drill, it’s also further in this talk…) • No WCF RIA Services support out-of-the-box though (so yes, that is NOT in this talk ) •…
  10. 10. WCF and ASMXServices
  11. 11. ASMX services (aka good oldwebservices)• ASMX services can be accessed without any change• Communication is done asynchronously• SOAP messages can be sent and received over ASMX services• From Visual Studio, use the default way of connecting with a service • Add service reference • Generates proxy • All Task-based! • Use proxy-class with the async/await keywords
  12. 12. Accessing an ASMXservice from Windows8DEMO
  13. 13. WCF Services• What is supported? • Bindings: • BasicHttpBinding • NetTcpBinding • NetHttpBinding • CustomBinding • Binding elements: • BinaryMessageEncodingBindingElement • TextMessageEncodingBindingElement • ConnectionOrientedTransportBindingElement • SslStreamSecurityBindingElement • WindowsStreamSecurityBindingElement • TcpTransportBindingElement • Http(s)TransportBindingElement • TransportSecurityBindingElement
  14. 14. WCF Services• What is supported • Encoding: • Text, Binary • Security modes: • None, Transport, TransportWithMessageCredential, TransportCredentialOnly (for BasicHttpBinding) • ClientCredentialType: • None, Basic, Digest, Negotiate, Ntlm, Windows • Transfer Mode: • Buffered, Streamed, StreamedRequest, and StreamedResponse • Serializers: • DataContractSerializer, DataContractJsonSerializer, XmlSerializer • Miscellaneous: • ChannelFactory • DuplexChannelFactory • CallbackBehavior
  15. 15. Things to note when working withWCF (also goes for ASMX)• No XML config file code • Code gets generated in the Reference.cs file • No config edit possible  • Use the partial ConfigureEndpoint method• Only Task-based methods are available • Ensures there are no blocking calls • Is done by default• Specify Internet capability
  16. 16. Accessing a WCFservicefrom Windows 8DEMO
  17. 17. What about security for servicecommunication?• WinRT supports sending credentials• When building service that expects credentials, generated code in Reference.cs will reflect thisresult.Security.Mode = System.ServiceModel.BasicHttpSecurityMode.TransportCredentialOnly;result.Security.Transport.ClientCredentialType = System.ServiceModel.HttpClientCredentialType.Windows;• https, custom validation are supported to enable TransportWithMessageCredential • Allows safe passing of username/password to service endpoint
  18. 18. Securecommunication from aWindows 8 appDEMO
  19. 19. Working with RESTservices
  20. 20. REST services• No more WebClient, replaced with HttpClient • Works with async • Located in System.Net• HttpClient defines • Get(Async) • Returns an HttpResponseMessage • Put(Async) • Post(Async) • Delete(Async)  RESTful!
  21. 21. Parsing the response• XML • Linq-To-XML • XmlReader/XmlWriter • XmlSerializer• JSON: • Use the JsonObject and feed it the returned string • We can use the Parse() method • Throws error if the returned string is faulty or invalid • Also defines GetNamedString(), GetNamedNumber() • Parsing via indexer • Not recommended • DataContractJsonSerializer is also available
  22. 22. Searching on Flickrusing the HttpClientclassDEMO
  23. 23. Credential support with RESTservices• If REST service requires authentication , WinRT will support it• Some samples: HttpClientHandler handler = new HttpClientHandler(); handler.UseDefaultCredentials = true; HttpClient client = new HttpClient(handler); using (var handler = new HttpClientHandler { Credentials = ... }) using (var client = new HttpClient(handler)) { var result = await client.GetAsync(...); }
  24. 24. Secure RESTcommunicationDEMO
  25. 25. Working with oDataservices
  26. 26. What is oData?• Open Data Protocol• Design goals ... • Invent as little as possible • Very low barrier of entry• OData is a RESTful protocol• Builds on HTTP and AtomPub• Defines ... • XML + JSON data representation • Addressing scheme • Query operators • Metadata
  27. 27. Sample URIs• • AtomPub service document, list of all collections• • all entries of a collection• http://.../Catalog/Genres(Adventures) • one entry by PK• http://.../Catalog/Genres(Adventures)/Name • one property as XML• http://.../Catalog/Genres(Adventures)/Name/$value • only the value
  28. 28. Navigation• http://.../Catalog/Genres(Adventures)/Titles • related entities• http://.../Catalog/Genres(Adventures)/$links/Title s • only the links• http://.../Catalog/Genres(Adventures)/Titles/$cou nt • count
  29. 29. Queries• ... /Titles?$filter=AverageRating gt 4 • filters• ... /Titles?$orderby=AverageRating desc, ReleaseYear asc • sorting• .../Titles?$select=ShortName, ReleaseYear • projection• Paging support: $top, $skip, $skiptoken, $inlinecount
  30. 30. oData and WinRT• There’s an OData client library available• Requires servers that comply with oData v1-v3• Support for Add Reference since RC • Previously we had to use the DataSvcUtil tool to generate the proxy • Still works if you want complete control over the proxy generation
  31. 31. Working with oDataservicesDEMO
  32. 32. Syndication
  33. 33. Syndication in general• Real Simple Syndication• RSS feeds expose information from sites mostly through XML• Feed is a list of syndication entries • Post • Author • Data • Links •  Fixed set of elements• Parsing it is possible • Manually (if you like to hurt yourself…) • Through a third-party library
  34. 34. Syndication in WinRT • WinRT has the Windows.Web.Syndication namespace • Contains SyndicationFeed and SyndicationClient classes • Allows downloading feed asynchronously • Can be provided with credentials if source requires them • Supports • Atom 0.3 and 1.0 • RSS 0.91, 0.92, 1.0 and 2.0) • Returns items in an object modelvar • Async (Task-based) client = new SyndicationClient();SyndicationFeed feed = await client.RetrieveFeedAsync(“<My RSS Feed>”);
  35. 35. SyndicationDEMO
  36. 36. Background transfers
  37. 37. Background transfers• Just like Windows Phone 7, only 1 app can be the main app• Can be annoying if your app downloads files • User can’t switch away or the download is interrupted• Windows.Networking.BackgroundTransfer has a BackgroundDownloader • Creates DownloadOperation instances • Can be paused, resumed...
  38. 38. Background transfers• Support for • Credentials • Custom headers via SetRequestHeader • Use for authentication methods such as cookies, forms-based authentication... • Progress reporting• Managed through separate process: BackgroundTransferHost.exe • Keeps running in the background
  39. 39. Background transfersDEMO
  40. 40. Tiles interactions
  41. 41. Types of notifications• Local (from the app code) • Can only be used when the app is running • Useful for tile updates (not that useful for toasts)• Scheduled • Update at specific time • Useful for tiles and toasts• Periodic updates• Push notifications
  42. 42. Periodic tile updates
  43. 43. Periodic tile updates• Poor man’s live tiles• Require nothing more than a service that returns XML of a tile/badge update• Great for distributing updates with wide audience
  44. 44. Periodic tile updates• Setting it up: • Build a service that returns an XML string • Build a Metro app that calls the service and sets up periodic tile/badge updates • TileUpdater.StartPeriodicUpdate should be called with every start of the application • Service should update after about the same amount of time polling happens • If service is not available, Windows will retry only at the next interval • Service can be http or https • App must declare internet capability• No support for tile update queueing• Don’t use it for breaking news!
  45. 45. Periodic TilesDEMO
  46. 46. Push Notifications
  47. 47. Types of notifications• Local (from the app code) • Can only be used when the app is running • Useful for tile updates (not that useful for toasts)• Scheduled • Update at specific time • Useful for tiles and toasts• Periodic • Update at specific interval • Poll a cloud service for content ...?• Push notifications are the missing link
  48. 48. Push notifications over WNS• WNS = Windows Notification Service• Allows delivery of tile and toast XML messages over the wire • Can arrive when the app isn’t running • Create background processing without processing • Happens on the server• Transparent process for the developer• Free services • Cloud-based so no worries on scalability • Easily updates millions of devices • Register your app for now via
  49. 49. WNS architecture 1. Request Channel URI 2. Register with your Cloud Service 3. Authenticate & Push Notification
  50. 50. Push notifications using Azure• What we need • Secure, web based API for channel URI registration • Persistent storage of channel URI • Storage for tile and toast images• What Azure offers us • Windows Azure Compute • Web Role • Full IIS support • WCF REST and ASP.NET MVC • Windows Azure Storage • Table Storage • Blob Storage
  51. 51. Push notificationsDEMO
  52. 52. Authenticating usingthe WebAuthBroker
  53. 53. The WebAuthBroker class• The web authentication broker provides a set of APIs and the infrastructure for apps to use Internet authentication and authorization protocols such as Oauth • When an app calls the web authentication broker, the user gets a dialog box in which the necessary webpages are rendered to sign in • After the user completes those steps, the dialog box goes away and the user continues with the app
  54. 54. The WebAuthBroker class
  55. 55. Benefits of the WebAuthBroker• An easy-to-use programming interface that frees the app developer from hosting a browser control within their own app• User credentials that are isolated from the app• Native support for single sign-on with online providers • Twitter • Facebook • Flickr • …
  56. 56. How the WebAuthBroker works• The web authentication broker is the facilitator between your app and authentication• It consists of a set of APIs, a broker, and a web host. • Your app uses the APIs to communicate with the broker. • The broker creates a new web host process in a separate app container • The broker communicates with the app, assembles the UI and controls the lifecycle of the web authentication host • The web authentication host renders the pages from the online providers website
  57. 57. Authenticating usingthe WebAuthBrokerDEMO
  58. 58. Using the Live SDK inyour Windows 8 apps
  59. 59. Live SDK Integration• Using the Live SDK, we can, from WinRT apps: • Leverage SSO functionality • Access data in SkyDrive • Integrate with Hotmail/Outlook and Messenger• Requires the Live SDK 5.0 to be installed on your system• Application needs to be registered with Windows Live • • Only need the package name• Requires that you are signed in with a Live ID/Microsoft account • We can log in using a live account or a local account • It’s possible to switch between the two
  60. 60. Live SDK Integration• The device has to be trusted • In the screenshot below, this hasn’t been done yet 
  61. 61. To integrate… • We can use some of the built-in controls in the SDK<live:SignInButton Name="MySignInButton" Scopes="wl.signin wl.basic wl.contacts_create"/> • Scope • A scope grants a permission level • Can be: • wl.signin • Single sign-in behavior • wl.basic • Read access to a users basic profile info. Also enables read access to a users list of contacts • wl.contacts_create • Creation of new contacts in the users address book • wl.calendars_update • Read access to a users personal, preferred, and business email addresses • … • Complete list at us/library/live/hh243646.aspx
  62. 62. Accessing SkyDrive from yourapps• Windows 8 integrates with SkyDrive (cloud)• Metro Apps can use SkyDrive through the Live SDK • Enables single sign-on using your Microsoft account • Don’t bother the user asking to login with every app • App automatically knows who you are • Called the easy sign-in• Users can use the machine with their Microsoft account • Apps can benefit from this as well using Live SDK • User needs to grant permission though (once)
  63. 63. Using the Live SDK inyour Windows 8 appsDEMO
  64. 64. Using roaming data inyour applications
  65. 65. Roaming data• Users can personalize their devices and settings• Windows and the built-in apps create a “connected” experience • Configure once, use everywhere• Roaming application data makes creating this for us very easy • App data can be local, roaming or temporary • Roaming will make sure that the data is synced to the cloud and other devices where the Microsoft account uses the particular app
  66. 66. Roaming data• What to place in roaming data? • Data that is relevant to the app that created it • Settings • Temporary document • Level in a game • App state • Context• Data that should not be placed in roaming data • Data that can be read/shared with other apps • Documents, pictures, exported data • Data that should be exported to SkyDrive• Limit is currently 100k • Preserve battery and performance • Can be checked using the RoamingStorageQuota class • If limit is surpassed, no data will be synced at all • It’s vital to only sync URIs instead of full pages
  67. 67. Example of roaming data • RSS reader app where the user can save how many items he wants to see on his screenWindows.Storage.ApplicationData.Current.RoamingSettings.Values[“ItemsPerPage”] = 10; • If you want to save the last article ID and want to create a continuous experience, name the setting HighPriorityWindows.Storage.ApplicationData.Current.RoamingSettings.Values[“HighPriority”] =currentFeedId;
  68. 68. Example of roaming data • If more than one setting need to be synced together, we can use a CompositeSettingValueWindows.Storage.ApplicationDataCompositeValue currentFeed =new Windows.Storage.ApplicationDataCompositeValue();currentFeed.Insert(“CurrentFeedId”, currentFeedId);currentFeed.Insert(“CurrentFeedPage”, currentFeedPage);Windows.Storage.ApplicationData.Current.RoamingSettings.Values[“HighPriority”] =currentFeed; • With the app running, the app can register for the DataChanged event on the ApplicationData class • Will fire when the application data has changed
  69. 69. Some best practices aroundroaming data• Only works with a Microsoft account• The device has to be trusted before roaming data will work• Don’t use it for simultaneous use of applications on more than one device at a time • Last save wins• Write often-changing only every now and then • Don’t use it to constantly write the location within a song • Writing too often can result in the device being locked- out for a certain amount of time
  70. 70. Using roaming data inyour applicationsDEMO
  71. 71. Working with sockets
  72. 72. Types of socket communication inWinRT• StreamSocket - Used to support network communication using a TCP stream socket• StreamSocketListener - Used to support listening for an incoming network connection using a TCP stream socket• DatagramSocket - Used to support network communication using a UDP datagram socket• MessageWebSocket - Used to support network communication that allows reading and writing whole messages using a WebSocket• StreamWebSocket - Used to support network communication that allows reading and writing streams using a WebSocket• All live in the Windows.Networking.Sockets namespace
  73. 73. When and when not to usesocketsRequirement SolutionConnects to a network service that uses an TCP or UDP socketsexisting protocol (SMTP, POP, IMAP, or MAPIfor mail, for example) that is not directlysupported by other networking featuresConnects to another machine on the same TCP or UDP socketslocal networkRequires a simple requestresponse protocol Representational State Transfer (REST) APIsthat can communicate through HTTP proxies that are available using C#, VB.NET, and C++Requires socket-like semantics (asynchronous, WebSocketsbi-directional transfers) to connect across theWeb, including through HTTP proxies.
  74. 74. TCP Sockets
  75. 75. TCP Sockets• TCP and UDP can be used to send and receive data in WinRT apps• Based on classes from the Windows.Networking.Sockets namespace • StreamSocket • StreamSocketListener • DatagramSocket• Support for • Making client connections • Listening for connections • Operating as a server, or for both client and server operations
  76. 76. TCP Sockets• Steps to get TCP sockets working in your Metro app • Use the StreamSocket class to create a TCP socket • ConnectAsync on the StreamSocket class allows making a network connection to a TCP network server • Streams.DataWriter allows sending data to the server • Basically allows writing common types on a stream • Streams.DataReader allows reading data from a server • Basically allows reading common types from a stream• StreamSocket object can be configured to use SSL/TLS for communications between the client and the server. • This support for SSL/TLS is limited to using the StreamSocket object as the client in the SSL/TLS negotiation
  77. 77. Using the StreamSocket• This class enables network communication using a TCP stream socket• What you can do with the StreamSocket • After instantiation of the StreamSocket, get a StreamSocketControl object using the Control property • Allows setting any properties on the StreamSocketControl object before calling one of the ConnectAsync methods • Use one of the ConnectAsync methods to establish a connection with the remote endpoint • Can be configured for use with SSL • Get the OutputStream property to write data to the remote host • Get the InputStream property to read data from the remote host • Read and write data as needed • Call the Close method to abort any pending operations • Releases all unmanaged resources associated with the StreamSocket object
  78. 78. Using theStreamSocketListener• This class enables listening for an incoming network connection using a TCP stream socket and accepting the connection• What you can do with the StreamSocketListener • After instantiation of the StreamSocketListener, use the Control property to retrieve a StreamSocketListenerControl object • Can be used to set the socket quality of service • Assign the ConnectionReceived event to an event handler • Call the BindServiceNameAsync or BindEndpointAsync method to bind to a local TCP port or service name • After an incoming connection is received, use the StreamSocketListenerConnectionReceivedEventArgs object to retrieve the Socket property with the StreamSocket object created • Use the StreamSocket object to send and receive data • Call the Close method to stop listening for and accepting incoming network connections • Releases all unmanaged resources associated with the StreamSocketListener object.
  79. 79. TCP SocketsDEMO
  80. 80. WebSockets
  81. 81. What’s a WebSocket?• The WebSocket Protocol defines a mechanism for two-way communication between a client and a server. • To establish a WebSocket connection, a specific, HTTP- based handshake is exchanged between the client and the server. • If successful, the application-layer protocol is "upgraded" from HTTP to WebSockets, using the previously established TCP connection. Once this occurs, HTTP is completely out of the picture • Data can be sent or received using the WebSocket protocol by either endpoint at any time, until the WebSocket connection is closed • Only works when the server has a WebSocket
  82. 82. Two types of WebSockets existMessageWebSocket StreamWebSocket Suitable for scenarios in which largeSuitable for typical scenarios where files (such as photos or movies) aremessages are not extremely large being transferredEnables notification that an entire Allows sections of a message to beWebSocket message has been received read with each read operation.Supports both UTF-8 and binary Supports only binary messagesmessages
  83. 83. Using WebSocketsfrom a Metro styleapplicationDEMO
  84. 84. Summary• Windows 8 supports many types of services• Most common including WCF, ASMX, oData work similarly to Silverlight• Async/await pattern makes development easier• More complex types including oAuth and sockets are pretty easy using WinRT API• Support for security
  85. 85. Q&A
  86. 86. Thanks!
  87. 87. Windows 8, Metro appsand the outside world Gill Cleeren Microsoft Regional Director & MVP Telerik MVP