This browser is no longer supported.
Upgrade to Microsoft Edge to take advantage of the latest features, security updates, and technical support.
Download Microsoft Edge
More info about Internet Explorer and Microsoft Edge
Windows Communication Foundation (WCF) allows you to create a service that exposes an ASP.NET AJAX-enabled endpoint that can be called from JavaScript on a client Web site. The basic procedures for building such services is discussed in
How to: Use Configuration to Add an ASP.NET AJAX Endpoint
and
How to: Add an ASP.NET AJAX Endpoint Without Using Configuration
.
ASP.NET AJAX supports operations that use the HTTP POST and HTTP GET verbs, with HTTP POST being the default. When creating an operation that has no side effects and returns data that rarely or never changes, use HTTP GET instead. Results of GET operations can be cached, which means that multiple calls to the same operation may result in only one request to your service. The caching is not done by WCF but can take place at any level (in a user's browser, on a proxy server, and other levels.) Caching is advantageous if you want to increase service performance, but may not be acceptable if data changes frequently or if the operation performs some action.
For example, if you are designing service to manage a user's music library, an operation that looks up the artist based on an album's title benefits from using GET, but an operation that adds an album to the user's personal collection must use POST.
To control the lifetime of the cache, use the
OutgoingWebResponseContext
type. For example, when designing a service that returns weather forecasts updated hourly, you would use GET but limit the cache duration to an hour or less to prevent the users of the service from accessing stale data.
When using services from an ASP.NET AJAX page that use the Script Manager control, it makes no difference whether the operation uses GET or POST - the script manager mechanism ensures that the correct request type is issued.
HTTP GET operations use any input parameters supported by POST operations, including complex data contract types. However, in most cases it is recommended to avoid too many parameters or parameters that are too complex in GET operations because it reduces caching efficiency.
This topic demonstrates how to select between GET and POST by adding the
WebGetAttribute
or
WebInvokeAttribute
attributes to the relevant operations in the service contract. The other steps (to implement, configure and host the service) that are required to get the service running are similar to those used by any ASP.NET AJAX service in WCF.
An operation marked with the
WebGetAttribute
always uses a GET request. An operation marked with the
WebInvokeAttribute
, or not marked with any of the two attributes, uses a POST request. The
WebInvokeAttribute
allows the use of other HTTP verbs, other than GET and POST (such as PUT and DELETE) through the
Method
property. However, these verbs are not supported by ASP.NET AJAX. If you intend to use the service from ASP.NET pages using the Script Manager control, do not use the
Method
property.
For a working example of switching to GET, see the
Basic AJAX Service
sample.
For a sample that uses POST, see the
AJAX Service Using HTTP POST
sample.
To create a WCF service that responds to HTTP GET or HTTP POST requests
Define a basic WCF service contract with an interface marked with the
ServiceContractAttribute
attribute. Mark each operation with the
OperationContractAttribute
. Add the
WebGetAttribute
attribute to stipulate that an operation should respond to HTTP GET requests. You can also add the
WebInvokeAttribute
attribute to explicitly specify HTTP POST, or not specify an attribute, which defaults to HTTP POST.
[ServiceContract]
public interface IMusicService
//This operation uses a GET method.
[OperationContract]
[WebGet]
string LookUpArtist(string album);
//This operation will use a POST method.
[OperationContract]
[WebInvoke]
void AddAlbum(string user, string album);
//This operation will use POST method by default
//since nothing else is explicitly specified.
[OperationContract]
string[] GetAlbums(string user);
//Other operations omitted…
Implement the IMusicService
service contract with a MusicService
.
public class MusicService : IMusicService
public void AddAlbum(string user, string album)
//Add implementation here.
//Other operations omitted…
Create a new file named service with a .svc extension in the application. Edit this file by adding the appropriate @ServiceHost directive information for the service. Specify that the WebScriptServiceHostFactory is to be used in the @ServiceHost directive to automatically configure an ASP.NET AJAX endpoint.
<%@ServiceHost
language=c#
Debug="true"
Service="Microsoft.Ajax.Samples.MusicService"
Factory=System.ServiceModel.Activation.WebScriptServiceHostFactory
To call the service
You can test your service's GET operations without any client code, by using the browser. For example, if your service is configured at the http://example.com/service.svc
address, then typing http://example.com/service.svc/LookUpArtist?album=SomeAlbum
into the browser address bar invokes the service and causes the response to be downloaded or displayed.
You can use services with GET operations in the same way as any other ASP.NET AJAX services - by entering the service URL into the Scripts collection of the ASP.NET AJAX Script Manager control. For an example, see the Basic AJAX Service.
See also
Creating WCF Services for ASP.NET AJAX
How to: Migrate AJAX-Enabled ASP.NET Web Services to WCF