Export (0) Print
Expand All

HttpListener.BeginGetContext Method

Begins asynchronously retrieving an incoming request.

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

public IAsyncResult BeginGetContext (
	AsyncCallback callback,
	Object state
)
public IAsyncResult BeginGetContext (
	AsyncCallback callback, 
	Object state
)
public function BeginGetContext (
	callback : AsyncCallback, 
	state : Object
) : IAsyncResult
Not applicable.

Parameters

callback

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

state

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

Return Value

An IAsyncResult object that indicates the status of the asynchronous operation.

Exception typeCondition

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.

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();
}

public static void NonblockingListener(String prefixes[])
{
    HttpListener listener = new HttpListener();
    for (int iCtr = 0; iCtr < prefixes.get_Length(); iCtr++) {
        String s = prefixes[iCtr];
        listener.get_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.get_AsyncWaitHandle().WaitOne();
    Console.WriteLine("Request processed asyncronously.");
    listener.Close();
} //NonblockingListener

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();
}

public static void ListenerCallback(IAsyncResult result)
{
    HttpListener listener = (HttpListener)(result.get_AsyncState());
    // Call EndGetContext to complete the asynchronous operation.
    HttpListenerContext context = listener.EndGetContext(result);
    HttpListenerRequest request = context.get_Request();
    // Obtain a response object.
    HttpListenerResponse response = context.get_Response();
    // Construct a response.
    String responseString = "<HTML><BODY> Hello world!</BODY></HTML>";
    ubyte buffer[] = System.Text.Encoding.get_UTF8().GetBytes(responseString);
    // Get a response stream and write the response to it.
    response.set_ContentLength64(buffer.get_Length());
    System.IO.Stream output = response.get_OutputStream();
    output.Write(buffer, 0, buffer.get_Length());
    // You must close the output stream.
    output.Close();
} //ListenerCallback

Windows 98, Windows Server 2003, Windows XP Media Center Edition, Windows XP SP2, Windows XP Starter Edition

The Microsoft .NET Framework 3.0 is supported on Windows Vista, Microsoft Windows XP SP2, and Windows Server 2003 SP1.

.NET Framework

Supported in: 3.0, 2.0

Community Additions

ADD
Show:
© 2014 Microsoft