This chapter has been excerpted from book "Essential Windows Communication Foundation (WCF): For .NET Framework" with permission from Addison-Wesley"
The new Web programming capabilities in WCF simplify the building of services for use on the Web. This chapter covers these services, including SOAP, POX, the UriTemplate class, the webHttpBinding binding, configuration-free hosting, and content syndication models.
PROGRAMMABLE WEB REFERS to a set of enabling technologies designed to help developers build the services for the Web. There are many ways of building services for the Web. We have already mentioned throughout the book how WCF can be used to build WS-* Web services, which use SOAP, HTTP, and XML. Services based on WS-* are typically built using a service-oriented architecture approach.
A service-oriented architecture approach follows four main tenants:
Services can be built from other styles of architectures, such as Representational State Transfer (REST). REST is an architectural style described in a dissertation from Roy Fielding (see www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm). REST follows a set of principles that are based on constraints:
A client/server approach is used to separate user interface from data storage.
Client/server interaction is stateless.
Network efficiency is improved using caching.
Components of the system interact using a uniform interface.
The overall system can be composed using a layering approach.
The REST architectural style is often referred to as the architectural style of the Web because the constraints can easily be seen in modern Web architectures. We mention service orientation and REST because these are two common architectural styles for building services on the Web today. It is important to understand that WCF does not dictate the architectural style or manner in which to build services. Instead it exposes a set of features and capabilities that allow you to build services using a variety of architectural styles. The rest of this chapter will focus on the features that help developers build services for the Web. To help understand the motivation behind these new features, we will examine how developers use the Web today.
All About the URI
Most everyone should be familiar with URIs because this is how people browse the Web today. People access resources, such as HTML pages, via URIs typed into the address bar of their browsers. Browsers can access a variety of resources using URIs, including images, videos, data, applications, and more. Accessing of resources via a URI is also one of the principles behind the REST architectural style.
Table 13.1 shows several examples of resources on the Web that can be accessed in this manner.
Table 13.1. URI Examples
Each of the examples specifies a URI that takes a set of parameters that identifies a resource to retrieve. Parameters are sent either as query strings or embedded as a part of the path of the URI. This means that the URI is used to identify, locate, and access resources. To better understand what we mean, we look at the URL used to retrieve stock quotes from Google. It is obvious from the following URL that the parameter q represents the stock symbol and is passed into the service as a query string parameter.
What is not represented is whether this URL is accessed using an HTTP GET or some other HTTP action. For now, we will assume that GET is being used. The URL can be rewritten with a parameter for the stock symbol in place of the MSFT stock symbol. Using this simplification of the URL, we can identify a number of resources.
This example helps form the basis for how we can identify and access resources on the Web.
The Ubiquitous GET
One thing in common with all the URIs in Table 13.1 is that they use the HTTP protocol to access resources. The HTTP protocol is considered the protocol of the Web. The original purpose of HTTP was to exchange HTML pages, but it has since been used to access all types of resources, including images, video, applications, and much more. The way in which it does this is by specifying a resource identifier and an action to be performed on that resource. URIs identify the resource. The action is defined by a set of HTTP verbs that specify the action to be performed on the resource. Table 13.2 shows a list of common HTTP verbs used on the Web today. There are many ways to interact with resources over the Web using the HTTP protocol, but none is as ubiquitous as GET. GET is by far the most widely used verb. POST comes in second, followed by other verbs such as PUT and DELETE.
Table 13.2. Common HTTP Verbs
|GET ||Retrieve the resource identified by the URI.|
|POST ||Send a resource to the server based on the resource identified by the URI.|
|PUT ||Store a resource based on the resource identified by the URI.|
|DELETE ||Delete a resource based on the resource identified by the URI.|
|HEAD ||Identical to GET except that the response is not returned. This is used to retrieve metadata for the resource identified by the URI.|
HTTP verbs form the basis for how we can interact with resources on the Web. GET is the most widely used HTTP verb because it is used to retrieve resources. HTTP verbs help to provide a uniform interface for interacting with resources, which is a constraint based on the REST architectural style.
Web Programming with WCF
Table 13.3 highlights some of the major features available to developers when they use WCF and .NET Framework 3.5. The remainder of this chapter focuses on the features within WCF that help enable the "programmable Web."
Table 13.3. Web Programming Features in .NET Framework 3.5
|Uri and UriTemplates ||Enhanced support for working with URIs to support REST architectural patterns.|
|webHttpBinding Binding ||A new binding that builds in support for POX and JSON, formal support for HTTP verbs including GET, and URI-based dispatching.|
|ASP.NET AJAX Integration ||Integration with ASP.NET AJAX to support client-side service proxies.|
|Content Syndication ||Classes for publishing and consuming RSS and ATOM syndication feeds.|