HttpListener HttpListener HttpListener HttpListener Class

Definición

Proporciona un agente de escucha del protocolo HTTP sencillo y controlado mediante programación.Provides a simple, programmatically controlled HTTP protocol listener. Esta clase no puede heredarse.This class cannot be inherited.

public ref class HttpListener sealed : IDisposable
public sealed class HttpListener : IDisposable
type HttpListener = class
    interface IDisposable
Public NotInheritable Class HttpListener
Implements IDisposable
Herencia
HttpListenerHttpListenerHttpListenerHttpListener
Implementaciones

Ejemplos

En el ejemplo de código siguiente se HttpListenermuestra el uso de.The following code example demonstrates using a HttpListener.

// This example requires the System and System.Net namespaces.
public static void SimpleListenerExample(string[] prefixes)
{
    if (!HttpListener.IsSupported)
    {
        Console.WriteLine ("Windows XP SP2 or Server 2003 is required to use the HttpListener class.");
        return;
    }
    // URI prefixes are required,
    // for example "http://contoso.com:8080/index/".
    if (prefixes == null || prefixes.Length == 0)
      throw new ArgumentException("prefixes");
    
    // Create a listener.
    HttpListener listener = new HttpListener();
    // Add the prefixes.
    foreach (string s in prefixes)
    {
        listener.Prefixes.Add(s);
    }
    listener.Start();
    Console.WriteLine("Listening...");
    // Note: The GetContext method blocks while waiting for a request. 
    HttpListenerContext context = listener.GetContext();
    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();
    listener.Stop();
}
Public Shared Sub SimpleListenerExample(prefixes As String())
    If Not HttpListener.IsSupported Then
        Console.WriteLine("Windows XP SP2 or Server 2003 is required to use the HttpListener class.")
        Return
    End If
    ' URI prefixes are required,
    ' for example "http://contoso.com:8080/index/".
    If prefixes Is Nothing Or prefixes.Length = 0 Then
        Throw New ArgumentException("prefixes")
    End If

    ' Create a listener
    Dim listener = New HttpListener()

    For Each s As String In prefixes
        listener.Prefixes.Add(s)
    Next
    listener.Start()
    Console.WriteLine("Listening...")
    ' Note: The GetContext method blocks while waiting for a request.
    Dim context As HttpListenerContext = listener.GetContext()
    Console.WriteLine("Listening...")
    ' Obtain a response object
    Dim request As HttpListenerRequest = context.Request
    ' Construct a response.
    Dim response As HttpListenerResponse = context.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()
    listener.Stop()
End Sub

Comentarios

Con la HttpListener clase, puede crear un agente de escucha del protocolo http simple que responda a las solicitudes HTTP.Using the HttpListener class, you can create a simple HTTP protocol listener that responds to HTTP requests. El agente de escucha está activo mientras dure el HttpListener objeto y se ejecuta dentro de la aplicación con sus permisos.The listener is active for the lifetime of the HttpListener object and runs within your application with its permissions.

Para usar HttpListener, cree una nueva instancia de la clase mediante el HttpListener constructor y use la Prefixes propiedad para obtener acceso a la colección que contiene las cadenas que especifican los prefijos de identificador uniforme de recursos (URI) del HttpListenerdebe procesar.To use HttpListener, create a new instance of the class using the HttpListener constructor and use the Prefixes property to gain access to the collection that holds the strings that specify which Uniform Resource Identifier (URI) prefixes the HttpListener should process.

Una cadena de prefijo URI se compone de un esquema (http o https), un host, un puerto opcional y una ruta de acceso opcional.A URI prefix string is composed of a scheme (http or https), a host, an optional port, and an optional path. Un ejemplo de una cadena de prefijo http://www.contoso.com:8080/customerData/ completa es.An example of a complete prefix string is http://www.contoso.com:8080/customerData/. Los prefijos deben terminar en una barra diagonal ("/").Prefixes must end in a forward slash ("/"). El HttpListener objeto con el prefijo que más se aproxime a un URI solicitado responde a la solicitud.The HttpListener object with the prefix that most closely matches a requested URI responds to the request. Varios HttpListener objetos no pueden agregar el mismo prefijo Win32Exception ; se produce una HttpListener excepción si agrega un prefijo que ya está en uso.Multiple HttpListener objects cannot add the same prefix; a Win32Exception exception is thrown if a HttpListener adds a prefix that is already in use.

Cuando se especifica un puerto, el elemento host se puede reemplazar por "*" para indicar HttpListener que acepta solicitudes enviadas al puerto si el URI solicitado no coincide con ningún otro prefijo.When a port is specified, the host element can be replaced with "*" to indicate that the HttpListener accepts requests sent to the port if the requested URI does not match any other prefix. Por ejemplo, para recibir todas las solicitudes enviadas al puerto 8080 cuando no se controla HttpListenerel URI solicitado, el prefijo es http://*: 8080/.For example, to receive all requests sent to port 8080 when the requested URI is not handled by any HttpListener, the prefix is http://*:8080/. Del mismo modo, para especificar HttpListener que acepta todas las solicitudes enviadas a un puerto, reemplace el elemento host por el carácter "+".Similarly, to specify that the HttpListener accepts all requests sent to a port, replace the host element with the "+" character. Por ejemplo, https://+:8080.For example, https://+:8080. Los caracteres*"" y "+" pueden estar presentes en prefijos que incluyen rutas de acceso.The "*" and "+" characters can be present in prefixes that include paths.

A partir de .net Core 2,0 o .NET Framework 4,6 en Windows 10, los subdominios comodín se admiten en los prefijos URI HttpListener administrados por un objeto.Starting with .NET Core 2.0 or .NET Framework 4.6 on Windows 10, wildcard subdomains are supported in URI prefixes that are managed by an HttpListener object. Para especificar un subdominio comodín, use el carácter*"" como parte del nombre de host en un prefijo de URI.To specify a wildcard subdomain, use the "*" character as part of the hostname in a URI prefix. Por ejemplo, http://*. foo.com/.For example, http://*.foo.com/. Pase este como argumento al Add método.Pass this as the argument to the Add method. Esto funciona a partir de .NET Core 2,0 o .NET Framework 4,6 en Windows 10; en versiones anteriores, esto genera un HttpListenerException.This works as of .NET Core 2.0 or .NET Framework 4.6 on Windows 10; in earlier versions, this generates an HttpListenerException.

Advertencia

No se deben usar los enlaces de carácter comodín de nivel superior http://+:8080(http://*: 8080/ y).Top-level wildcard bindings (http://*:8080/ and http://+:8080) should not be used. Los enlaces de carácter comodín de nivel superior pueden exponer su aplicación a vulnerabilidades de seguridad.Top-level wildcard bindings can open up your app to security vulnerabilities. Esto se aplica tanto a los caracteres comodín fuertes como a los débiles.This applies to both strong and weak wildcards. Use nombres de host explícitos en lugar de caracteres comodín.Use explicit host names rather than wildcards. Los enlaces de carácter comodín de subdominio (por ejemplo, *.mysub.com) no suponen este riesgo de seguridad si se controla todo el dominio primario (a diferencia de *.com, que sí es vulnerable).Subdomain wildcard binding (for example, *.mysub.com) doesn't have this security risk if you control the entire parent domain (as opposed to *.com, which is vulnerable). Vea la sección 5.4 de RFC 7230 para obtener más información.See rfc7230 section-5.4 for more information.

Para empezar a escuchar las solicitudes de los clientes, agregue los prefijos de URI a la Start colección y llame al método.To begin listening for requests from clients, add the URI prefixes to the collection and call the Start method. HttpListenerofrece modelos sincrónicos y asincrónicos para procesar solicitudes de cliente.HttpListener offers both synchronous and asynchronous models for processing client requests. Se tiene acceso a las solicitudes y sus respuestas asociadas HttpListenerContext utilizando el objeto devuelto por el GetContext método o sus homólogos asincrónicos BeginGetContext , EndGetContext los métodos y.Requests and their associated responses are accessed using the HttpListenerContext object returned by the GetContext method or its asynchronous counterparts, the BeginGetContext and EndGetContext methods.

El modelo sincrónico es adecuado si la aplicación se bloquea mientras se espera una solicitud de cliente y si desea procesar solo una solicitud a la vez.The synchronous model is appropriate if your application should block while waiting for a client request and if you want to process only one request at a time. Con el modelo sincrónico, llame al GetContext método, que espera a que un cliente envíe una solicitud.Using the synchronous model, call the GetContext method, which waits for a client to send a request. El método devuelve un HttpListenerContext objeto para su procesamiento cuando se produce uno.The method returns an HttpListenerContext object to you for processing when one occurs.

En el modelo asincrónico más complejo, la aplicación no se bloquea mientras espera solicitudes y cada solicitud se procesa en su propio subproceso de ejecución.In the more complex asynchronous model, your application does not block while waiting for requests and each request is processed in its own execution thread. Utilice el BeginGetContext método para especificar un método definido por la aplicación que se va a llamar para cada solicitud entrante.Use the BeginGetContext method to specify an application-defined method to be called for each incoming request. Dentro de ese método, llame EndGetContext al método para obtener la solicitud, procesarla y responder.Within that method, call the EndGetContext method to obtain the request, process it, and respond.

En ambos modelos, se tiene acceso a las solicitudes entrantes mediante la HttpListenerContext.Request propiedad y se representan mediante HttpListenerRequest objetos.In either model, incoming requests are accessed using the HttpListenerContext.Request property and are represented by HttpListenerRequest objects. Del mismo modo, se obtiene acceso a HttpListenerContext.Response las respuestas mediante la propiedad HttpListenerResponse y se representan mediante objetos.Similarly, responses are accessed using the HttpListenerContext.Response property and are represented by HttpListenerResponse objects. Estos objetos comparten cierta funcionalidad con los HttpWebRequest objetos HttpWebResponse y, pero no se pueden utilizar los últimos objetos junto con HttpListener porque implementan comportamientos de cliente, no de servidor.These objects share some functionality with the HttpWebRequest and HttpWebResponse objects, but the latter objects cannot be used in conjunction with HttpListener because they implement client, not server, behaviors.

HttpListener Puede requerir la autenticación del cliente.An HttpListener can require client authentication. Puede especificar un esquema determinado para su uso en la autenticación, o puede especificar un delegado que determine el esquema que se va a utilizar.You can either specify a particular scheme to use for authentication, or you can specify a delegate that determines the scheme to use. Debe solicitar algún tipo de autenticación para obtener información sobre la identidad del cliente.You must require some form of authentication to obtain information about the client's identity. Para obtener más información, vea Userlas AuthenticationSchemespropiedades, AuthenticationSchemeSelectorDelegate y.For additional information, see the User, AuthenticationSchemes, and AuthenticationSchemeSelectorDelegate properties.

Nota

Si crea un HttpListener mediante HTTPS, debe seleccionar un certificado de servidor para ese agente de escucha.If you create an HttpListener using https, you must select a Server Certificate for that listener. De lo contrario HttpWebRequest , una consulta HttpListener de esto producirá un error con un cierre inesperado de la conexión.Otherwise, an HttpWebRequest query of this HttpListener will fail with an unexpected close of the connection.

Nota

Puede configurar certificados de servidor y otras opciones de agente de escucha mediante el shell de red (netsh. exe).You can configure Server Certificates and other listener options by using Network Shell (netsh.exe). Consulte Shell de red (netsh) para obtener más detalles.See Network Shell (Netsh) for more details. El ejecutable comenzó a distribuirse con Windows Server 2008 y Windows Vista.The executable began shipping with Windows Server 2008 and Windows Vista.

Nota

Si especifica varios esquemas de autenticación para HttpListener, el agente de escucha desafiará a los clientes en el Negotiateorden siguiente Digest:, NTLM, Basicy, a continuación,.If you specify multiple authentication schemes for the HttpListener, the listener will challenge clients in the following order: Negotiate, NTLM, Digest, and then Basic.

Constructores

HttpListener() HttpListener() HttpListener() HttpListener()

Inicializa una nueva instancia de la clase HttpListener.Initializes a new instance of the HttpListener class.

Propiedades

AuthenticationSchemes AuthenticationSchemes AuthenticationSchemes AuthenticationSchemes

Obtiene o establece el esquema utilizado para autenticar los clientes.Gets or sets the scheme used to authenticate clients.

AuthenticationSchemeSelectorDelegate AuthenticationSchemeSelectorDelegate AuthenticationSchemeSelectorDelegate AuthenticationSchemeSelectorDelegate

Obtiene o establece el delegado al que se llama para determinar el protocolo utilizado para autenticar los clientes.Gets or sets the delegate called to determine the protocol used to authenticate clients.

DefaultServiceNames DefaultServiceNames DefaultServiceNames DefaultServiceNames

Obtiene una lista predeterminada de nombres de proveedores de servicios (SPN) determinada por los prefijos registrados.Gets a default list of Service Provider Names (SPNs) as determined by registered prefixes.

ExtendedProtectionPolicy ExtendedProtectionPolicy ExtendedProtectionPolicy ExtendedProtectionPolicy

Obtiene o establece el objeto ExtendedProtectionPolicy que se va a emplear para la protección extendida para una sesión.Gets or sets the ExtendedProtectionPolicy to use for extended protection for a session.

ExtendedProtectionSelectorDelegate ExtendedProtectionSelectorDelegate ExtendedProtectionSelectorDelegate ExtendedProtectionSelectorDelegate

Obtiene o establece el delegado llamado para determinar el objeto ExtendedProtectionPolicy que se va a emplear para cada solicitud.Gets or sets the delegate called to determine the ExtendedProtectionPolicy to use for each request.

IgnoreWriteExceptions IgnoreWriteExceptions IgnoreWriteExceptions IgnoreWriteExceptions

Obtiene o establece un valor Boolean que especifica si su aplicación recibe las excepciones que aparecen cuando HttpListener envía la respuesta al cliente.Gets or sets a Boolean value that specifies whether your application receives exceptions that occur when an HttpListener sends the response to the client.

IsListening IsListening IsListening IsListening

Obtiene un valor que indica si se ha iniciado HttpListener.Gets a value that indicates whether HttpListener has been started.

IsSupported IsSupported IsSupported IsSupported

Obtiene un valor que indica si HttpListener se puede utilizar con el sistema operativo actual.Gets a value that indicates whether HttpListener can be used with the current operating system.

Prefixes Prefixes Prefixes Prefixes

Obtiene los prefijos de identificador URI controlados por este objeto HttpListener.Gets the Uniform Resource Identifier (URI) prefixes handled by this HttpListener object.

Realm Realm Realm Realm

Obtiene o establece el territorio, o partición de recurso, asociado con el objeto HttpListener.Gets or sets the realm, or resource partition, associated with this HttpListener object.

TimeoutManager TimeoutManager TimeoutManager TimeoutManager

El administrador de tiempo de espera para esta instancia HttpListener .The timeout manager for this HttpListener instance.

UnsafeConnectionNtlmAuthentication UnsafeConnectionNtlmAuthentication UnsafeConnectionNtlmAuthentication UnsafeConnectionNtlmAuthentication

Obtiene o establece un valor Boolean que controla si, cuando se utiliza NTLM, se requieren solicitudes adicionales que utilicen la misma conexión del protocolo TCP (Protocolo de control de transporte) para la autenticación.Gets or sets a Boolean value that controls whether, when NTLM is used, additional requests using the same Transmission Control Protocol (TCP) connection are required to authenticate.

Métodos

Abort() Abort() Abort() Abort()

Cierra inmediatamente el objeto HttpListener, descartando todas las solicitudes actualmente puestas en la cola.Shuts down the HttpListener object immediately, discarding all currently queued requests.

BeginGetContext(AsyncCallback, Object) BeginGetContext(AsyncCallback, Object) BeginGetContext(AsyncCallback, Object) BeginGetContext(AsyncCallback, Object)

Empieza a recuperar de forma asincrónica una solicitud de entrada.Begins asynchronously retrieving an incoming request.

Close() Close() Close() Close()

Cierra HttpListener.Shuts down the HttpListener.

EndGetContext(IAsyncResult) EndGetContext(IAsyncResult) EndGetContext(IAsyncResult) EndGetContext(IAsyncResult)

Finaliza una operación asincrónica para recuperar una solicitud de cliente de entrada.Completes an asynchronous operation to retrieve an incoming client request.

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Determina si el objeto especificado es igual al objeto actual.Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetContext() GetContext() GetContext() GetContext()

Espera a una solicitud de entrada y vuelve cuando se recibe una.Waits for an incoming request and returns when one is received.

GetContextAsync() GetContextAsync() GetContextAsync() GetContextAsync()

Espera una solicitud entrante como una operación asincrónica.Waits for an incoming request as an asynchronous operation.

GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Sirve como la función hash predeterminada.Serves as the default hash function.

(Inherited from Object)
GetType() GetType() GetType() GetType()

Obtiene el Type de la instancia actual.Gets the Type of the current instance.

(Inherited from Object)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Crea una copia superficial del objeto Object actual.Creates a shallow copy of the current Object.

(Inherited from Object)
Start() Start() Start() Start()

Permite que esta instancia reciba solicitudes de entrada.Allows this instance to receive incoming requests.

Stop() Stop() Stop() Stop()

Hace que esta instancia deje de recibir solicitudes de entrada.Causes this instance to stop receiving incoming requests.

ToString() ToString() ToString() ToString()

Devuelve una cadena que representa el objeto actual.Returns a string that represents the current object.

(Inherited from Object)

Implementaciones de interfaz explícitas

IDisposable.Dispose() IDisposable.Dispose() IDisposable.Dispose() IDisposable.Dispose()

Libera los recursos mantenidos por este objeto HttpListener.Releases the resources held by this HttpListener object.

Se aplica a

Consulte también: