Consulting/Training
Jeremy Likness
Principal Consultant
@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
@JeremyLikness