The Windows Runtime and the Web

Post on 20-Dec-2014

632 views 2 download

Tags:

description

The Windows Runtime is the runtime that drives Windows 8 and the new Windows Store apps. The runtime enables developers to build rich client apps that run natively on Window 8 devices. In this session, Jeremy Likness explores the various built-in components and APIs that enable Windows Store apps to connect to SOAP, REST, and OData endpoints and syndicate RSS and Atom feeds. Learn how these tools make it easy to build Windows Store apps that are alive and connected to the internet.

Transcript of The Windows Runtime and the Web

Consulting/Training

Jeremy Likness

Principal Consultant

jlikness@wintellect.com

@JeremyLikness

WinRT and the Web: Keeping Windows Store Apps Alive and Connected

Consulting/Training

consultingWintellect helps you build better software, faster, tackling the tough projects and solving the software and technology questions that help you transform your business. Architecture, Analysis and Design Full lifecycle software development Debugging and Performance tuning Database design and development

trainingWintellect's courses are written and taught by some of the biggest and most respected names in the Microsoft programming industry. Learn from the best. Access the same

training Microsoft’s developers enjoy Real world knowledge and solutions

on both current and cutting edge technologies

Flexibility in training options – onsite, virtual, on demand

Founded by top experts on Microsoft – Jeffrey Richter, Jeff Prosise, and John Robbins – we pull out all the stops to help our customers achieve their goals through advanced software-based consulting and training solutions.

who we are

About Wintellect

Consulting/Training

Programming the Windows Runtime by Example

http://bit.ly/winrtexample

http://winrtexamples.codeplex.com/

Consulting/Training

WinRT and .NET WebViewSimple: HTTP (REST) OData (WCF Data Services) Syndication SOAP Sockets Mobile ServicesLive Tiles

Agenda

Consulting/Training

Most .NET network classes are available to Windows Store apps for Windows 8.1

Windows Store apps written in C# have access to a limited .NET profile, in addition to WinRT components provided via projection

Many network components have been moved into WinRT (i.e. the HttpClient)

Other features include proxies that generate pure .NET code as a function of the IDE (i.e. “add service reference”

We’ll focus on C# but the WinRT components are valid for C++ and JavaScript too

WinRT and .NET

Consulting/Training

Internet Explorer 11 control

Direct Composition surface so it can be translated/transformed and overlaid (this wasn’t the case in Windows 8, only 8.1)

Capable of rendering SVG and WebGL

Interoperability with the Windows Store app (can call to scripts on the page and vice versa)

Navigation methods (history, journal) built-in

WebView Control

Consulting/Training

this.WebViewControl.Navigate(new Uri(JeremyBlog));

this.WebViewControl.Navigate(new

Uri("ms-appx-web:///Data/Ellipse.html"));

// can also navigate to streams with a special URI handler in 8.1

this.WebViewControl.NavigateToString(HtmlFragment);

var parameters = new[] { "p/biography.html" };

this.WebViewControl.InvokeScript(

"superSecretBiographyFunction",

parameters);

WebView Control

Consulting/Training

WebViewExamples from Chapter03 http://winrtexamples.codeplex.com/

The Embedded Browser: Using WebView

Consulting/Training

WinRT as of 8.1

Pure control over HTTP

Viable for REST i.e. serialize/deserialize directly from JSON and/or XML

Control headers and manage response as text, stream, etc.

GET, POST, PUT, and DELETE

Using HttpRequestMessage for custom verbs, etc.

Base class for more specialized clients

HttpClient

Consulting/Training

private static readonly MediaTypeWithQualityHeaderValue Json = new MediaTypeWithQualityHeaderValue("application/json");

string jsonResponse;

using (var client = new HttpClient())

{

client.DefaultRequestHeaders.Accept.Add(Json);

jsonResponse = await client.GetStringAsync(productsUri);

}

var json = JsonObject.Parse(jsonResponse);

HttpClient (and a little JSON help)

Consulting/Training

RESTService Example from Chapter05 http://winrtexamples.codeplex.com/

Parsing a REST service with HttpClient and JSON

Consulting/Training

AdvancedHttpExample Example from Chapter10 http://winrtexamples.codeplex.com/

Advanced HTTP Downloads

Consulting/Training

http://bit.ly/1gq5Obu

Add-on for Visual Studio 2013

Allows right-click and add reference for service

Generates the proxy and structures using a data context (similar to Entity Framework / WCF RIA)

OData (WCF Services)

Consulting/Training

OData (WCF Data Services)

Consulting/Training

ServiceBase = new Uri("http://services.odata.org/OData/OData.svc", UriKind.Absolute);

var client = new ODataService.DemoService(ServiceBase);

var categoryQuery = client.Categories.AddQueryOption("$expand", "Products");

var categories = await Task<IEnumerable<ODataService.Category>>

.Factory.FromAsync(

categoryQuery.BeginExecute(result => { }, client),

categoryQuery.EndExecute);

OData Client Proxy

Consulting/Training

ODataServiceExample from Chapter05 http://winrtexamples.codeplex.com/

Connecting to OData using WCF Data Services

Consulting/Training

WinRT (mirrors the .NET equivalent very closely)

Parses Atom and RSS

Suitable for both consuming and publishing

Also capable of converting between formats (i.e. read an Atom and serve an RSS)

Syndication (Atom/RSS)

Consulting/Training

private static readonly Uri CSharperImageUri = new Uri(

"http://feeds.feedburner.com/CSharperImage/", UriKind.Absolute);

var client = new SyndicationClient();

var feed = await client.RetrieveFeedAsync(CSharperImageUri);

var group = new DataFeed(feed.Id, feed.Title.Text, AuthorSignature, feed.ImageUri.ToString(), feed.Subtitle.Text);

from item in feed.Items

let content = Windows.Data.Html.HtmlUtilities.ConvertToText(item.Content.Text)

let summary = string.Format("{0} ...", content.Length > 255 ? content.Substring(0, 255) : content)

Feed Syndication

Consulting/Training

SyndicationExample from Chapter05 http://winrtexamples.codeplex.com/

Syndicating a Feed

Consulting/Training

IDE provides similar interface to OData

Uses WSDL to understand the shape of the service

Considered a more complicated protocol but is very widely used and has built-in security, encryption, and other features that are beneficial to the enterprise

Generates a proxy (client) that is used to handle the communications (RPC-based)

Can also use channel factories to create clients

SOAP

Consulting/Training

SOAP

Consulting/Training

var proxy = new WeatherSoapClient();

var result = await proxy.GetWeatherInformationAsync();

foreach (var item in result.GetWeatherInformationResult)

{

this.weather.Add(item);

}

SOAP Proxy (Generated Client)

Consulting/Training

using (

var factory = new ChannelFactory<WeatherSoapChannel>(

new BasicHttpBinding(), new EndpointAddress("http://wsf.cdyne.com/WeatherWS/Weather.asmx")))

{

var channel = factory.CreateChannel();

var forecast = await channel.GetCityForecastByZIPAsync(zipCode);

var result = forecast.AsWeatherForecast();

foreach (var day in result.Forecast)

{

day.ForecastUri = await this.GetImageUriForType(day.TypeId);

}

return result;

}

SOAP Proxy (Channel Factory)

Consulting/Training

SoapServiceExample from Chapter05 http://winrtexamples.codeplex.com/

Connecting to SOAP-based Web Services

Consulting/Training

HTTP sits on top of TCP

Sockets communicate at a lower level – TCP/UDP

Newer WebSockets protocol for HTML5 uses HTTP ports for a simpler sockets interface

Use for real-time bi-directional communication

Windows 8.1 can be a “server” … process isolation makes it impractical except as demos, but works fine as a client

Sockets

Consulting/Training

WebSocketExamples from Chapter10 http://winrtexamples.codeplex.com/

WebSockets

Consulting/Training

SocketsGame from Chapter10 http://winrtexamples.codeplex.com/

TCP Sockets

Consulting/Training

Affectionately referred to as WAMS

Literally right-click and “add Connected Service”

Create simple CRUD and other types of services using hosted SQL

Create push notifications for live updates and notifications within your app

Windows Azure Mobile Services

Consulting/Training

Windows Azure Mobile Services

Consulting/Training

Windows Azure Mobile Services

Consulting/Training

Windows Azure Mobile Services

Consulting/Training

public static MobileServiceClient WinRTByExampleBookClient =

new MobileServiceClient(

"https://MOBILESERVICENAME.azure-mobile.net/",

"APPLICATION KEY");

// query

var table = App.WinRTByExampleBookClient.GetTable<Subscriber>();

var query = table.CreateQuery()

.OrderBy(x => x.LastName)

.ThenBy(x => x.FirstName);

Subscribers = query.ToIncrementalLoadingCollection();

// insert

var table = App.WinRTByExampleBookClient.GetTable<Subscriber>();

await table.InsertAsync(SubscriberBeingEdited);

Windows Azure Mobile Services

Consulting/Training

Tiles and Notifications

Consulting/Training

LiveConnectExample from Chapter06 http://winrtexamples.codeplex.com/

Bonus Example - LiveConnect

Consulting/Training

WinRT and .NET WebViewSimple: HTTP (REST) OData (WCF Data Services) Syndication SOAP Sockets Mobile ServicesLive Tiles

Recap

Consulting/Training

Subscribers Enjoy

Expert Instructors

Quality Content

Practical Application

All Devices

Wintellect’s On-DemandVideo Training Solution

Individuals | Businesses | Enterprise Organizations

WintellectNOW.com

Authors Enjoy

Royalty Income

Personal Branding

Free Library Access

Cross-Sell Opportunities

Try It Free! Use Promo Code:

LIKNESS-2013

Consulting/Training

Questions?

Jeremy Likness

Principal Consultant

jlikness@Wintellect.com

@JeremyLikness