How to: Specify Browser or Client HTTP Handling
Microsoft Silverlight will reach end of support after October 2021. Learn more.
With Silverlight, you can specify whether the browser or the client provides HTTP handling for your Silverlight-based applications. By default, HTTP handling is performed by the browser and you must opt-in to client HTTP handling.
Client HTTP handling provides greater flexibility for sending request headers, enables you to call HTTP methods other than GET and POST, and access the response message if an error occurs. However, there are advantages to using browser HTTP processing as well. The following table lists the differences between browser and client HTTP handling in Silverlight.
Feature |
Browser HTTP Handling |
Client HTTP Handling |
---|---|---|
Basic authentication |
Yes |
Yes |
Caching |
Yes |
Not supported |
Concurrent connections |
Handled by browser |
6 |
Cross-domain support |
Requires policy file |
Requires policy file unless application is trusted (Silverlight 4) |
Digest authentication |
Handled by browser |
Supported in Silverlight 4 |
Request methods |
GET and POST |
All if permitted per policy file |
Response body |
Only with 200 OK response |
Fully supported |
Response headers |
Not supported |
Fully supported |
Status codes |
Only 200 or 404 |
Fully supported |
In addition to specifying whether to use browser or client HTTP handling, you can specify the scope for the handling. For example, you can specify HTTP handling for all messages, for a scheme (HTTP or HTTPS), for a particular domain, or for a single request object. Once you have specified the HTTP handling for a scheme or domain, you cannot change the HTTP handling for that domain or scheme. The following procedures describe how to specify browser or client HTTP handling, set the scope of the handling, and how to determine whether the browser or client is performing the handling for a request object.
Note: |
---|
If you have not specified the HTTP handling for a particular scheme, domain, or request, HTTP handling for the scheme domain or request defaults to the browser. |
To specify HTTP handling for all requests
Register all HTTP and HTTPS URIs by using the RegisterPrefix method, passing a ClientHttp object to specify client HTTP handling or a BrowserHttp object to specify browser HTTP handling. The following code shows how to specify the client for handling all HTTP and HTTPS requests and responses.
Dim httpResult As Boolean = WebRequest.RegisterPrefix("http://", _ WebRequestCreator.ClientHttp) Dim httpsResult As Boolean = WebRequest.RegisterPrefix("https://", _ WebRequestCreator.ClientHttp)
bool httpResult = WebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp); bool httpsResult = WebRequest.RegisterPrefix("https://", WebRequestCreator.ClientHttp);
Check the RegisterPrefix operation for success, and use the WebClient or HttpWebRequest as you normally would.
If httpResult = True Then Dim wc As New WebClient() wc.OpenReadAsync(New Uri( _ "http://api.search.live.net/qson.aspx?query=Silverlight")) AddHandler wc.OpenReadCompleted, AddressOf wc_OpenReadCompleted
if (httpResult == true) { WebClient wc = new WebClient(); wc.OpenReadAsync(new Uri("http://api.search.live.net/qson.aspx?query=Silverlight")); wc.OpenReadCompleted += new OpenReadCompletedEventHandler(wc_OpenReadCompleted); }
To specify HTTP handling for a domain
Register the domain hosting services that you want to access by using the RegisterPrefix method, passing a ClientHttp object to specify client HTTP handling or a BrowserHttp object to specify browser HTTP handling. The following code shows how to specify the browser for handling all HTTP and requests and responses.
' Register the domain containing services you want to access with ' Silverlight client. Dim httpResult As Boolean = WebRequest.RegisterPrefix( _ "http://api.search.live.net", WebRequestCreator.BrowserHttp)
// Register the domain containing services you want to access with // Silverlight client. bool httpResult = WebRequest.RegisterPrefix("http://api.search.live.net", WebRequestCreator.BrowserHttp);
Check the RegisterPrefix operation for success, and use the WebClient or HttpWebRequest as you normally would. In this example, HTTP requests and responses to the specified domain are processed by the browser.
If httpResult = True Then Dim wc As New WebClient() wc.OpenReadAsync(New Uri( _ "http://api.search.live.net/qson.aspx?query=Silverlight")) AddHandler wc.OpenReadCompleted, AddressOf wc_OpenReadCompleted
if (httpResult == true) { WebClient wc = new WebClient(); wc.OpenReadAsync(new Uri("http://api.search.live.net/qson.aspx?query=Silverlight")); wc.OpenReadCompleted += new OpenReadCompletedEventHandler(wc_OpenReadCompleted); }
To specify HTTP handling for a single request object
Use the IWebRequestCreate.Create method to create the request object and register the domain hosting the services that you want to access and the HTTP handling for that request. You do this by passing the desired domain as the URI parameter and a ClientHttp object to specify client HTTP handling or a BrowserHttp object to specify browser HTTP handling.
' Create a HttpWebRequest with the specific URL ' you will access with Silverlight client. Dim request As HttpWebRequest = DirectCast( _ WebRequestCreator.ClientHttp.Create(New Uri( _ "http://api.search.live.net/qson.aspx?query=Silverlight")), HttpWebRequest)
// Create a HttpWebRequest with the specific URL // you will access with Silverlight client. HttpWebRequest request = (HttpWebRequest)WebRequestCreator.ClientHttp.Create(new Uri( "http://api.search.live.net/qson.aspx?query=Silverlight"));
Use the HttpWebRequest you created as you normally would. In this example, the HTTP handling for the HttpWebRequest is performed by the client.
' Use the request as you normally would. request.BeginGetResponse(New AsyncCallback(AddressOf ReadCallback), request)
// Use the request as you normally would. request.BeginGetResponse(new AsyncCallback(ReadCallback), request);
To determine HTTP handling for a request object
Use the CreatorInstance property of WebRequest to get an IWebRequestCreate object .
Dim request As HttpWebRequest = DirectCast(asynchronousResult.AsyncState, _ HttpWebRequest) Dim creator As IWebRequestCreate = request.CreatorInstance
HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState; IWebRequestCreate creator = request.CreatorInstance;
Call the GetType method on the IWebRequestCreate object to obtain whether the object is a ClientHttp or BrowserHttp
Dim requestType As Type = creator.[GetType]()
Type requestType = creator.GetType();