Export (0) Print
Expand All

HttpListener.BeginGetContext Method

Begins asynchronously retrieving an incoming request.

Namespace:  System.Net
Assembly:  System (in System.dll)

[HostProtectionAttribute(SecurityAction.LinkDemand, ExternalThreading = true)]
public IAsyncResult BeginGetContext(
	AsyncCallback callback,
	Object state
)

Parameters

callback
Type: System.AsyncCallback

An AsyncCallback delegate that references the method to invoke when a client request is available.

state
Type: System.Object

A user-defined object that contains information about the operation. This object is passed to the callback delegate when the operation completes.

Return Value

Type: System.IAsyncResult
An IAsyncResult object that indicates the status of the asynchronous operation.

ExceptionCondition
HttpListenerException

A Win32 function call failed. Check the exception's ErrorCode property to determine the cause of the exception.

InvalidOperationException

This object has not been started or is currently stopped.

ObjectDisposedException

This object is closed.

NoteNote:

The HostProtectionAttribute attribute applied to this type or member has the following Resources property value: ExternalThreading. The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser). For more information, see the HostProtectionAttribute class or SQL Server Programming and Host Protection Attributes.

The BeginGetContext method begins an asynchronous (non-blocking) call to receive incoming client requests. Before calling this method, you must call the Start method and add at least one Uniform Resource Identifier (URI) prefix to listen for by adding the URI strings to the HttpListenerPrefixCollection returned by the Prefixes property.

The asynchronous operation must be completed by calling the EndGetContext method. Typically, the method is invoked by the callback delegate.

This method does not block while the operation completes. To get an incoming request and block until the operation completes, call the GetContext method.

For detailed information about using the asynchronous programming model, see Calling Synchronous Methods Asynchronously

Notes to Callers:

This member outputs trace information when you enable network tracing in your application. For more information, see Network Tracing.

The following code example demonstrates using the BeginGetContext method to specify a callback method that will handle incoming client requests.

public static void NonblockingListener(string [] prefixes)
{
    HttpListener listener = new HttpListener();
    foreach (string s in prefixes)
    {
        listener.Prefixes.Add(s);
    }
    listener.Start();
    IAsyncResult result = listener.BeginGetContext(new AsyncCallback(ListenerCallback),listener);
    // Applications can do some work here while waiting for the  
    // request. If no work can be done until you have processed a request, 
    // use a wait handle to prevent this thread from terminating 
    // while the asynchronous operation completes.
    Console.WriteLine("Waiting for request to be processed asyncronously.");
    result.AsyncWaitHandle.WaitOne();
    Console.WriteLine("Request processed asyncronously.");
    listener.Close();
}

The following code example implements a callback method.

public static void ListenerCallback(IAsyncResult result)
{
    HttpListener listener = (HttpListener) result.AsyncState;
    // Call EndGetContext to complete the asynchronous operation.
    HttpListenerContext context = listener.EndGetContext(result);
    HttpListenerRequest request = context.Request;
    // Obtain a response object.
    HttpListenerResponse response = context.Response;
    // Construct a response.
    string responseString = "<HTML><BODY> Hello world!</BODY></HTML>";
    byte[] buffer = System.Text.Encoding.UTF8.GetBytes(responseString);
    // Get a response stream and write the response to it.
    response.ContentLength64 = buffer.Length;
    System.IO.Stream output = response.OutputStream;
    output.Write(buffer,0,buffer.Length);
    // You must close the output stream.
    output.Close();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008 R2, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

The .NET Framework and .NET Compact Framework do not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

.NET Framework

Supported in: 3.5, 3.0, 2.0

Community Additions

ADD
Show:
© 2014 Microsoft