Foreword Preface 1. REST Basics Architecture of the World Wide Web SOAP REST Resources and URIs Uniform Interface Resource Representations Implementing a Simple RESTful Service Example Resources URIs and Uniform Interface Representations Interaction Wrap-Up Processes Summary
2. WCF RESTful Programming Model Isnt WCF All About SOAP? Channels and Dispatching HTTP Programming with WCF 3.0 Web Programming in WCF 3.5 WebHttpBinding WebHttpBehavior WebServiceHost WebOperationContext WebGetAttribute UriTemplate UriTemplate Literal Values UriTemplate Special Values UriTemplate QueryString Summary
3. Pr0gramming Read-0nly Services Using WebGetAttribute and UriTemplate Data Formats Message DataContract XmlSerializer Hybrid Approach Summary
4. Programming Read/Write Services POST, PUT, and DELETE Using WeblnvokeAttribute Resources URIs and Uniform Interface Representations Implementation Summary
5. Hosting WCF RESTful Services WCF REST Hosting Isnt a Special Case Self-Hosting Configuring, Opening, and Closing a ServiceHost Base Addresses ServiceHost Versus WebServiceHost Custom ServiceHost Hosting in IIS ASP.NET Compatibility Multiple Hosmames Removing the .svc File Extension Custom ServiceHostFactory Hosting Wrap-Up Summary
6. Programming Feeds Building a Feed with WCF SyndicationItem Formatters Exposing a Feed on a Live URI Feed Validation Adding Links to a Feed Summary
7. Programming Ajax and Silverlight Clients WCF Web Services and Ajax JSON JSON-Enabling a Service Endpoint ASP.NET Ajax Silverlight 1.0 Silverlight 2.0 Parsing XML in Silverlight 2.0 Parsing JSON in Silverlight 2.0 Consuming Feeds in Silverlight 2.0 Cross-Domain Security in Silverlight 2.0 Returning JSON and XML Conditionally with a Single Method Summary
9. Using Workflow to Deliver REST Services Consuming REST Services from WF The SendActivity Instance The ReceiveActivity Instance Stateless Workflow Services Stateful Workflow Services Summary
10. Consuming RESTful XML Services Using WCF Defining the Client Generating the Contract Creating the Resource Representations Creating the ServiceContract Using the Service Client Extensibility Summary
11. Working with HTTP Programming HTTP with WCF IncomingWebRequestContext OutgoingWebResponseContext OutgoingWebRequestContext IncomingWebResponseContext Context Wrap-Up Status Codes 201 —— Created 404 —— Not Found Conditional GET LastModified ETags Caching Output Caching HttpContext.Cache Content-Type Summary A. WCF 3.5 SP1 B. ADO.NETData Services. C. ADO.NET Entity Framework Walkthrough Index
精彩片段:
People often ask me why I would use WF when anything that I canaccomplish in WF could be written using just code. My typical answeris that I think WF is a powerful model for some (perhaps many) usecases because of the visibility it provides, both at development time andat runtime. For instance, notice that I didnt have to spend much timeexplaining what this workflow does, as Figure 9-1 explains it well. Infact, while I was writing this chapter, I asked my 15-year-old son (whois not a developer) to look at the figure, and with no background knowl-edge of WF he was able to discern the functionality of the workflow.Using WF to explain application logic to a 15-year-old is probably astretch, but I think it illustrates the power of WFs visibility-encouragingmodeling. The workflow first checks the blog entry for any spelling errors. If there are errors, theUI will notify the user and allow him to fix the errors. Then the workflow creates anAtom entry, and finally it executes the last and most important activity in the workflow:the AddEntry activity. This instance of SendActivity will call the RESTful endpoint thatimplements the service function of the IBlogAPI contract (the code for the IBlogAPIcontract is included with the code samples for this book). You can add a 5endActivity instance to your workflow by dragging it from the Toolboxand dropping it onto your workflow design surface in the appropriate area. To config-ure it, double-click on it in the Designer (or go to the Property Grid and modify all therequired properties). When you double-click on SendActivity, the Choose Operationdialog box will appear (see Figure 9-2).