steve maine senior program manager microsoft corporation
TRANSCRIPT
![Page 1: Steve Maine Senior Program Manager Microsoft Corporation](https://reader033.vdocuments.net/reader033/viewer/2022042607/5516c217550346f0208b590e/html5/thumbnails/1.jpg)
WCF: Building RESTful Services
Steve MaineSenior Program ManagerMicrosoft Corporation
![Page 2: Steve Maine Senior Program Manager Microsoft Corporation](https://reader033.vdocuments.net/reader033/viewer/2022042607/5516c217550346f0208b590e/html5/thumbnails/2.jpg)
Source: Pingdom.com
![Page 3: Steve Maine Senior Program Manager Microsoft Corporation](https://reader033.vdocuments.net/reader033/viewer/2022042607/5516c217550346f0208b590e/html5/thumbnails/3.jpg)
1993:Web == Content
![Page 4: Steve Maine Senior Program Manager Microsoft Corporation](https://reader033.vdocuments.net/reader033/viewer/2022042607/5516c217550346f0208b590e/html5/thumbnails/4.jpg)
The Browser Generic client experience
URI’s Addressing and identification
HTML Common presentation format
Hyperlinks Anarchic interconnectivity
HTTP GET Common operation everything supports
Content-Driven Web Architecture
![Page 5: Steve Maine Senior Program Manager Microsoft Corporation](https://reader033.vdocuments.net/reader033/viewer/2022042607/5516c217550346f0208b590e/html5/thumbnails/5.jpg)
2008:Web == Content + Capabilities
![Page 6: Steve Maine Senior Program Manager Microsoft Corporation](https://reader033.vdocuments.net/reader033/viewer/2022042607/5516c217550346f0208b590e/html5/thumbnails/6.jpg)
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
![Page 7: Steve Maine Senior Program Manager Microsoft Corporation](https://reader033.vdocuments.net/reader033/viewer/2022042607/5516c217550346f0208b590e/html5/thumbnails/7.jpg)
RESTful Tenents
The Web is a graph of linked Resources Resources are identified by URI’s 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
![Page 8: Steve Maine Senior Program Manager Microsoft Corporation](https://reader033.vdocuments.net/reader033/viewer/2022042607/5516c217550346f0208b590e/html5/thumbnails/8.jpg)
REST Continuum
Well Constructed URIs
HTTP Verbs GET – Fetch PUT – Update/Insert DELETE – Delete POST – Append
Standard Representations
RESTfullness
POST to 1 URI OKQuerystrings OK
HTTP Verbs GET – Fetch POST – Overloaded
AJAX Services POX OK
Purists Pragmatists
![Page 9: Steve Maine Senior Program Manager Microsoft Corporation](https://reader033.vdocuments.net/reader033/viewer/2022042607/5516c217550346f0208b590e/html5/thumbnails/9.jpg)
AJAX Services with WCF
demo
![Page 10: Steve Maine Senior Program Manager Microsoft Corporation](https://reader033.vdocuments.net/reader033/viewer/2022042607/5516c217550346f0208b590e/html5/thumbnails/10.jpg)
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)
![Page 11: Steve Maine Senior Program Manager Microsoft Corporation](https://reader033.vdocuments.net/reader033/viewer/2022042607/5516c217550346f0208b590e/html5/thumbnails/11.jpg)
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” %>"%>
![Page 12: Steve Maine Senior Program Manager Microsoft Corporation](https://reader033.vdocuments.net/reader033/viewer/2022042607/5516c217550346f0208b590e/html5/thumbnails/12.jpg)
[WebGet] And [WebInvoke]
Binds a WCF operation to URI space and HTTP method
Indicate the HTTP Method for the operation WebGet – Don’t 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 UriTemplate – Rich binding to URI
![Page 13: Steve Maine Senior Program Manager Microsoft Corporation](https://reader033.vdocuments.net/reader033/viewer/2022042607/5516c217550346f0208b590e/html5/thumbnails/13.jpg)
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
{productId} hole / variable gets bound to productId parameter in operation
[OperationContract][WebGet(UriTemplate=“product/{productId}")]Product GetProduct(int productId);
Variable
![Page 14: Steve Maine Senior Program Manager Microsoft Corporation](https://reader033.vdocuments.net/reader033/viewer/2022042607/5516c217550346f0208b590e/html5/thumbnails/14.jpg)
WCF REST Starter Kit
announcing
![Page 15: Steve Maine Senior Program Manager Microsoft Corporation](https://reader033.vdocuments.net/reader033/viewer/2022042607/5516c217550346f0208b590e/html5/thumbnails/15.jpg)
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
![Page 16: Steve Maine Senior Program Manager Microsoft Corporation](https://reader033.vdocuments.net/reader033/viewer/2022042607/5516c217550346f0208b590e/html5/thumbnails/16.jpg)
The REST 0f WCF
demo
![Page 17: Steve Maine Senior Program Manager Microsoft Corporation](https://reader033.vdocuments.net/reader033/viewer/2022042607/5516c217550346f0208b590e/html5/thumbnails/17.jpg)
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
![Page 18: Steve Maine Senior Program Manager Microsoft Corporation](https://reader033.vdocuments.net/reader033/viewer/2022042607/5516c217550346f0208b590e/html5/thumbnails/18.jpg)
Evals & Recordings
Please fill
out your
evaluation for
this session at:
This session will be available as a recording at:
www.microsoftpdc.com
![Page 19: Steve Maine Senior Program Manager Microsoft Corporation](https://reader033.vdocuments.net/reader033/viewer/2022042607/5516c217550346f0208b590e/html5/thumbnails/19.jpg)
Please use the microphones provided
Q&A
![Page 20: Steve Maine Senior Program Manager Microsoft Corporation](https://reader033.vdocuments.net/reader033/viewer/2022042607/5516c217550346f0208b590e/html5/thumbnails/20.jpg)
© 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.
![Page 21: Steve Maine Senior Program Manager Microsoft Corporation](https://reader033.vdocuments.net/reader033/viewer/2022042607/5516c217550346f0208b590e/html5/thumbnails/21.jpg)
![Page 22: Steve Maine Senior Program Manager Microsoft Corporation](https://reader033.vdocuments.net/reader033/viewer/2022042607/5516c217550346f0208b590e/html5/thumbnails/22.jpg)
WebGet/WebInvoke Examples
[OperationContract][WebInvoke( Method=“PUT", ResponseFormat=WebMessageFormat.Json, UriTemplate=“product/{productId}")]Product UpdateProduct(int productId, product p);
[OperationContract][WebGet( ResponseFormat=WebMessageFormat.Json, UriTemplate=“product/{productId}")]ProductData GetProduct(int productId);
![Page 23: Steve Maine Senior Program Manager Microsoft Corporation](https://reader033.vdocuments.net/reader033/viewer/2022042607/5516c217550346f0208b590e/html5/thumbnails/23.jpg)
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 ); . . .}
![Page 24: Steve Maine Senior Program Manager Microsoft Corporation](https://reader033.vdocuments.net/reader033/viewer/2022042607/5516c217550346f0208b590e/html5/thumbnails/24.jpg)
AdapterStream
Used when you want a Stream or TextWriter but don’t have one handy
[OperationContract, WebGet]Stream EchoText(string text){ return new AdapterStream( textWriter => { textWriter.WriteLine("You said: "); textWriter.WriteLine(text); textWriter.Flush(); }, Encoding.UTF8);}
![Page 25: Steve Maine Senior Program Manager Microsoft Corporation](https://reader033.vdocuments.net/reader033/viewer/2022042607/5516c217550346f0208b590e/html5/thumbnails/25.jpg)
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 }}
![Page 26: Steve Maine Senior Program Manager Microsoft Corporation](https://reader033.vdocuments.net/reader033/viewer/2022042607/5516c217550346f0208b590e/html5/thumbnails/26.jpg)
[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>
![Page 27: Steve Maine Senior Program Manager Microsoft Corporation](https://reader033.vdocuments.net/reader033/viewer/2022042607/5516c217550346f0208b590e/html5/thumbnails/27.jpg)
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)