This document discusses building RESTful services with WCF. It provides an overview of the evolution of the web from being content-driven to also including capabilities. It outlines REST principles and how WCF supports building RESTful services through features like the webHttpBinding, WebGet/WebInvoke attributes, UriTemplates, and the WCF REST Starter Kit. Examples are given of using these features to build RESTful operations.
4. Content-Driven Web Architecture
The Browser
Generic client experience
URIs
Addressing and identification
HTML
Common presentation format
Hyperlinks
Anarchic interconnectivity
HTTP GET
Common operation everything supports
6. Capability-Enabled Web
Architecture
Rich Browser Clients
Programmability via script or plugins
HTTP
Baseline application protocol
Common set of operations + status codes
Domain-neutral data-oriented formats
JSON, Atom/Atom Publishing
Refine to support domain-specific schemas
Presentation formats
HTML, CSS
7. RESTful Tenents
The Web is a graph of linked Resources
Resources are identified by URIs
Resources support a fixed set of operations
In practice, these are defined by HTTP
Applications follow links
to achieve late binding
REST is an architectural style, not a specification
8. REST Continuum
Purists RESTfullness Pragmatists
Well Constructed URIs POST to 1 URI OK
Querystrings OK
HTTP Verbs
HTTP Verbs GET Fetch
GET Fetch POST Overloaded
PUT Update/Insert
DELETE Delete
POST Append
AJAX Services
Standard Representations
POX OK
10. webHttpBinding
New web-friendly WCF Binding in Fx 3.5
Allows for the development of RESTful
services
Does not use SOAP envelopes
HTTP and HTTPS Transports Only
Supports several wire formats:
XML
JSON
Binary (streams)
11. WebServiceHost
Specialized SerivceHost for RESTful services
Eliminates need for lots of configuration
Automatically configures address, binding,
contract
Optimized for single-endpoint services
Use from .svc file:
<%@ ServiceHost Language="C#" Debug="true"
Service="Caching1.FeedService"
Factory=System.ServiceModel.Activation.WebServiceHostFactory
%>"%>
12. [WebGet] And [WebInvoke]
Binds a WCF operation to URI
space and HTTP method
Indicate the HTTP Method for the operation
WebGet Dont make me write it
WebInvoke All verbs other than GET
(Method parameter takes in the name of the
Verb)
Other Parameters
BodyStyle Indicates whether the Request/
Response are wrapped or not
RequestFormat Json or Xml
ResponseFormat Json or Xml
13. UriTemplate
String that allows you to define
the structure of the URI, as well as
to define Holes
The Holes are variables
You Bind the template with parameters to
fill the holes
Variable
[OperationContract]
[WebGet(UriTemplate=product/{productId}")]
Product GetProduct(int productId);
{productId} hole / variable gets bound
to productId parameter in operation
15. WCF REST Starter Kit
Microsoft.ServiceModel.Web.dll
New features supporting RESTful services
Visual Studio 2008 Templates
REST Collections/Singleton Services
Atom Feed/Atom Publishing Protocol
HTTP/POX Services
REST Samples
Codeplex Project
Released at PDC
Written by WCF team
Features may be included in .NET 4.0
17. What We've Talked About Today
REST and the zen of the web
WCF features for REST scenarios
[WebGet] + [WebInvoke]
UriTemplate
WebHttpBinding
And many more
The WCF REST Starter Kit
Available today at http://msdn.com/wcf/rest
18. Evals & Recordings
l
Please fil This sess
ion will
r
out you be availa
ble as
evalua tion for a record
: ing at:
this se ssion at
www.microsoftpdc.com
20. 息 2008 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other
countries.
The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to
changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of
this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
23. WebProtocolException
CLR Exception that can be turned into HTTP
status code on the wire
Can optionally carry detail information for
display in the browser
[OperationContract, WebGet]
Stream EchoText(string text)
{
if( text == null )
throw new WebProtocolException( HttpStatusCode.BadRequest );
. . .
}
24. AdapterStream
Used when you want a Stream or
TextWriter but dont have one handy
[OperationContract, WebGet]
Stream EchoText(string text)
{
return new AdapterStream( textWriter =>
{
textWriter.WriteLine("You said: ");
textWriter.WriteLine(text);
textWriter.Flush();
}, Encoding.UTF8);
}
25. Request Interceptors
MessageInspectors at the channel layer
Think of them like a per-service pipeline
Arbitrary message manipulation prior to
dispatch; can prevent dispatch too
public class XHttpMethodOverrideInterceptor:RequestInterceptor
{
public override void ProcessRequest(
ref RequestContext requestContext)
{
//Change the HTTP method used for dispatch based on
//the X-HTTP-Method-Override header
}
}
26. [WebCache]
Integrates WCF operations with ASP.NET
caching (requires ASP.NET Compat Mode)
Cache profile stored in Web.config
[OperationContract, WebGet]
[WebCache(CacheProfileName="CacheFor1Min")]
public Atom10FeedFormatter GetFeed(int i) { }
<system.web>
<caching>
<outputCacheSettings>
<outputCacheProfiles>
<add name="CacheFor1Min" duration="60"
enabled="true" location="Any" varyByParam=i"/>
</outputCacheProfiles>
</outputCacheSettings>
</caching>
</system.web>
27. ASP.NET Authentication Support
It just works with ASP.NET
Full support for Membership + Roles
Requires ASP.NET Compatibility Mode
[OperationContract, WebGet]
[PrincipalPermission(SecurityAction.Demand, Role=admin")]
SampleResponseBody GetData(int i, string s)