HttpListener.BeginGetContext(AsyncCallback, Object) Metodo

Definizione

Avvia il recupero in modo asincrono di una richiesta in arrivo.Begins asynchronously retrieving an incoming request.

public:
 IAsyncResult ^ BeginGetContext(AsyncCallback ^ callback, System::Object ^ state);
public IAsyncResult BeginGetContext (AsyncCallback callback, object state);
member this.BeginGetContext : AsyncCallback * obj -> IAsyncResult
Public Function BeginGetContext (callback As AsyncCallback, state As Object) As IAsyncResult

Parametri

callback
AsyncCallback

Delegato AsyncCallback che fa riferimento al metodo da richiamare quando è disponibile una richiesta del client.An AsyncCallback delegate that references the method to invoke when a client request is available.

state
Object

Oggetto definito dall'utente che contiene informazioni sull'operazione.A user-defined object that contains information about the operation. Questo oggetto viene passato al delegato callback al completamento dell'operazione.This object is passed to the callback delegate when the operation completes.

Restituisce

Oggetto IAsyncResult che indica lo stato dell'operazione asincrona.An IAsyncResult object that indicates the status of the asynchronous operation.

Eccezioni

Errore di una chiamata di funzione Win32.A Win32 function call failed. Verificare la proprietà ErrorCode dell'eccezione per determinare la causa dell'eccezione.Check the exception's ErrorCode property to determine the cause of the exception.

Questo oggetto non è stato avviato o è attualmente interrotto.This object has not been started or is currently stopped.

Questo oggetto è chiuso.This object is closed.

Esempi

Nell'esempio di codice riportato di seguito viene illustrato l'utilizzo del metodo BeginGetContext per specificare un metodo di callback che gestirà le richieste client in ingresso.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 Shared Sub NonblockingListener(ByVal prefixes As String())
    Dim listener As HttpListener = New HttpListener()

    For Each s As String In prefixes
        listener.Prefixes.Add(s)
    Next

    listener.Start()
    Dim result As IAsyncResult = listener.BeginGetContext(New AsyncCallback(AddressOf 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()
End Sub

Nell'esempio di codice seguente viene implementato un metodo di callback.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 Shared Sub ListenerCallback(ByVal result As IAsyncResult)
    Dim listener As HttpListener = CType(result.AsyncState, HttpListener)
    ' Call EndGetContext to complete the asynchronous operation.
    Dim context As HttpListenerContext = listener.EndGetContext(result)
    Dim request As HttpListenerRequest = context.Request
    ' Obtain a response object.
    Dim response As HttpListenerResponse = context.Response
    ' Construct a response.
    Dim responseString As String = "<HTML><BODY> Hello world!</BODY></HTML>"
    Dim buffer As Byte() = System.Text.Encoding.UTF8.GetBytes(responseString)
    ' Get a response stream and write the response to it.
    response.ContentLength64 = buffer.Length
    Dim output As System.IO.Stream = response.OutputStream
    output.Write(buffer, 0, buffer.Length)
    ' You must close the output stream.
    output.Close()
End Sub

Commenti

Il metodo BeginGetContext inizia una chiamata asincrona (non bloccante) per ricevere le richieste client in ingresso.The BeginGetContext method begins an asynchronous (non-blocking) call to receive incoming client requests. Prima di chiamare questo metodo, è necessario chiamare il metodo Start e aggiungere almeno un prefisso di Uniform Resource Identifier (URI) da ascoltare aggiungendo le stringhe URI al HttpListenerPrefixCollection restituito dalla proprietà Prefixes.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.

L'operazione asincrona deve essere completata chiamando il metodo EndGetContext.The asynchronous operation must be completed by calling the EndGetContext method. In genere, il metodo viene richiamato dal delegato callback.Typically, the method is invoked by the callback delegate.

Questo metodo non si blocca durante il completamento dell'operazione.This method does not block while the operation completes. Per ottenere una richiesta in ingresso e bloccarla fino al completamento dell'operazione, chiamare il metodo GetContext.To get an incoming request and block until the operation completes, call the GetContext method.

Per informazioni dettagliate sull'uso del modello di programmazione asincrona, vedere chiamata asincrona dei metodi sincroniFor detailed information about using the asynchronous programming model, see Calling Synchronous Methods Asynchronously

Note per i chiamanti

Questo membro genera informazioni di traccia quando viene abilitata la funzionalità di traccia di rete nell'applicazione in uso.This member outputs trace information when you enable network tracing in your application. Per ulteriori informazioni, vedere la pagina relativa alla traccia di rete nel .NET Framework.For more information, see Network Tracing in the .NET Framework.

Si applica a