You are on page 1of 29

REST, JSON and RSS with

Windows Communication
Foundation 3.5
Rob Windsor
ObjectSharp Consulting
Visual Basic MVP
Senior Consultant with ObjectSharp Consulting
President of the Toronto Visual Basic User
Member of the MSDN Canada Speakers Bureau
Contact me via my blog
WCF Overview
JSON Services
HTTP Programming Model
One-stop-shop for services
Consistent object model
First released with .NET Framework 3.0

Focus on the functionality, WCF takes care of the

Windows Communication Foundation
The ABCs of WCF
Client Service
Message A B C A B C
Address Binding Contract
(Where) (How) (What)
WCF Standard Bindings
Name Transport Encoding Interop
BasicHttpBinding HTTP/HTTPS Text Yes
NetTcpBinding TCP Binary No
NetPeerTcpBinding P2P Binary No
NetNamedPipeBinding IPC Binary No
WSHttpBinding HTTP/HTTPS Text, MTOM Yes
WSFederationBinding HTTP/HTTPS Text, MTOM Yes
WSDualHttpBinding HTTP/HTTPS Text, MTOM Yes
NetMsmqBinding MSMQ Binary No
NetIntegrationBinding MSMQ Binary Yes
WCF Services
WCF Overview
JSON Services
HTTP Programming Model
JavaScript Object Notation
Format for bridging JavaScript and objects
Easier for browsers than XML
ASP.NET AJAX & other AJAX toolkits use it
Other web-aware clients also (Silverlight, etc.)
var data = {temp : 59, descr : cloudy};
document.write (The weather is + data.descr);
What is JSON?
WCF AJAX support in Visual Studio
Script manager, VS Project Templates
WCF automatically generates JS proxy
Usage pattern similar to existing one:
Add service to Script Manager control
Write JavaScript code to work with proxy
Configuration not required
Via the WebScriptServiceHostFactory (.svc file)

Works in ASP.NET Medium Trust!

WCF / AJAX Integration
JSON Services
WCF Overview
JSON Services
HTTP Programming Model
Embrace the URI
Segments map to application logic
HTTP GET is special
GET is idempotent (View It)
Multiple GETs to a URI should produce the same (or similar)
PUT / POST / DELETE do stuff (Do It)
Content-type header is the data model
Image, XML, JSON, etc.

Web Concepts (REST){artist}?album={album}{artist}/{album}
The Web, the URI, and Apps
Type for modeling URI to application semantics
Can bind data to a template, output a URI
Can match a URI to a template, retrieve data
Returned from UriTemplate match operations
Can get relative paths and wildcard segments
For binding a URI to a group of UriTemplates
Modeling a URI in .NET 3.5
Uri address = new Uri(http://localhost:2000);
UriTemplate template =
new UriTemplate({artist}/{album});
Uri boundUri =
Northwind, Overdone);
UriTemplateMatch match = template.Match(address,
String bandName = match.BoundVariables[artist];
Roundtrip Data in a URI
Simple URI-to-application mapping

Stream GetAlbumImage(String artist, String album);

Stream GetMainImage(String artist);
URIs in WCF Contracts
All HTTP verbs are first class citizens
GET, POST, PUT, etc.
View It vs Do It separation mimics web
Stream GetAlbumImage(String bandName, String album);

void AddAlbum(AlbumInfo albumInfo);
HTTP Verbs in WCF Contracts
HTTP headers can indicate
Accepted data formats (Request)
The format of the returned data (Response)
Common header names:
Accept (Request), Content-Type (Response)
Small sampling of varieties:
text/html, text/css,
image/gif, image/jpeg,
application/atom+xml, application/json,

Data Formats and the Web
WebOperationContext.Current provides access to
incoming request headers
Can also set outgoing response headers
Some are shortcut for easier use
Stream GetAlbumImage(String bandName, String album){
Stream stream; // get the image from somewhere
WebOperationContext.Current.OutgoingResponse.ContentType =
return stream;
Specifying Data Format in WCF
WebHttpBinding endpoint on a ServiceHost
Add WebHttpBehavior to the endpoint
Use WebServiceHost/Factory in most cases
Web endpoints do not support WSDL

Works in ASP.NET Medium Trust!

Hosting / Binding
View It and Do It
JSON Services
HTTP Programming Model
Syndications are more than news and blogs
Representation of any set of data
Usually slowly changing
Unified object model for RSS and Atom
SyndicationFeed / SyndicationItem
Feeds are service operations
Consume as a service or as document

Syndication Goals in .NET 3.5
Single stop for syndications
Create and Consume with or without WCF
Easy to use object model
Transport Agnostic
Supports syndication extensions
Format Agnostic
RSS 2.0 & ATOM 1.0, others possible

Works in ASP.NET Medium Trust!

Syndication in .NET Fx 3.5

interface IAlbumSyndication {
Feed(String format);
Syndication Contracts in WCF
Syndication with PictureServices
Simple HTTP service development
SOAP and POX from the same contract
JSON messaging capability
Simple syndication really!

Built on WCF
extensibility points
from .NET 3.0
Web Centric Features in WCF 3.5
Microsoft WCF Community Site
PictureServices Samples
The EndPoint on Channel 9
Justin Smiths Blog
Steve Maines Blog
Getting Started with WCF