Partage via


HttpListener.BeginGetContext(AsyncCallback, Object) Méthode

Définition

Commence à récupérer une demande entrante de façon asynchrone.

public:
 IAsyncResult ^ BeginGetContext(AsyncCallback ^ callback, System::Object ^ state);
public IAsyncResult BeginGetContext (AsyncCallback? callback, 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

Paramètres

callback
AsyncCallback

Délégué AsyncCallback qui fait référence à la méthode à appeler quand une demande du client est disponible.

state
Object

Objet défini par l'utilisateur qui comporte des informations sur l'opération. Cet objet est passé au délégué callback quand l'opération se termine.

Retours

Objet IAsyncResult qui indique l'état de l'opération asynchrone.

Exceptions

Un appel de fonction Win32 a échoué. Vérifiez la propriété ErrorCode de l’exception pour déterminer la cause de l’exception.

Cet objet n'a pas été démarré ou été actuellement arrêté.

Cet objet est fermé.

Exemples

L’exemple de code suivant illustre l’utilisation de la BeginGetContext méthode pour spécifier une méthode de rappel qui gérera les requêtes clientes entrantes.


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

L’exemple de code suivant implémente une méthode de rappel.

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

Remarques

La BeginGetContext méthode commence un appel asynchrone (non bloquant) pour recevoir des demandes clientes entrantes. Avant d’appeler cette méthode, vous devez appeler la Start méthode et ajouter au moins un préfixe URI (Uniform Resource Identifier) à écouter en ajoutant les chaînes d’URI au HttpListenerPrefixCollection retourné par la Prefixes propriété .

L’opération asynchrone doit être effectuée en appelant la EndGetContext méthode . En règle générale, la méthode est appelée par le callback délégué.

Cette méthode ne se bloque pas tant que l’opération se termine. Pour obtenir une requête entrante et bloquer jusqu’à la fin de l’opération, appelez la GetContext méthode .

Pour plus d’informations sur l’utilisation du modèle de programmation asynchrone, consultez Appel asynchrone de méthodes synchrones.

Notes pour les appelants

Ce membre génère des informations de traçage lorsque vous activez le traçage réseau dans votre application. Pour plus d’informations, consultez Suivi réseau dans le .NET Framework.

S’applique à