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 muestra cómo utilizar un HttpListener.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();
}

Comentarios

Mediante el HttpListener (clase), puede crear un agente de escucha de protocolo HTTP sencillo que responde 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 durante la vigencia de la 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, crear una nueva instancia de la clase con el HttpListener constructor y use la Prefixes la deprefijosdepropiedadparateneraccesoalacolecciónquecontienelascadenasqueespecificanquéidentificadoruniformederecursos(URI)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 completa es http://www.contoso.com:8080/customerData/.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 ("/"). La HttpListener objeto con el prefijo que mejor coincida con un identificador 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; un Win32Exception excepción se produce si un HttpListener agrega un prefijo que ya está en usar.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 puede reemplazarse por "*" para indicar que el HttpListener acepta las 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 recibir todas las solicitudes enviadas al puerto 8080 al URI solicitado no se controla por cualquier HttpListener, 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/. De forma similar, para especificar que el HttpListener acepta todas las solicitudes enviadas a un puerto, reemplace el elemento de host con 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. El "*" y "+" caracteres 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, subdominios comodín se admiten en los prefijos URI que se administran mediante un HttpListener 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 comodín de subdominio, use la "*" caracteres como parte del nombre de host en un prefijo de identificador 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/. Esto pasa como argumento para el 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

Enlaces de carácter comodín de nivel superior (http://*: 8080 / y http://+:8080) debe no usarse.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 clientes, agregue los prefijos URI a la colección y llamar a la Start método.To begin listening for requests from clients, add the URI prefixes to the collection and call the Start method. HttpListener ofrece modelos sincrónicos y asincrónicos para procesar las solicitudes de cliente.HttpListener offers both synchronous and asynchronous models for processing client requests. Las solicitudes y sus respuestas asociadas son accesibles mediante el HttpListenerContext objeto devuelto por la GetContext método o sus equivalentes asincrónicos, el BeginGetContext y EndGetContext métodos.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 debe bloquearse mientras espera una solicitud de cliente y si desea procesar 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 a la GetContext método, que espera a que un cliente enviar 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 de procesamiento cuando uno se realiza.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 de 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. Use el BeginGetContext método para especificar un método definido por la aplicación al que 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 a la EndGetContext 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 casos, las solicitudes entrantes son accesibles mediante el 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. De forma similar, las respuestas son accesibles mediante el HttpListenerContext.Response propiedad y se representan mediante HttpListenerResponse objetos.Similarly, responses are accessed using the HttpListenerContext.Response property and are represented by HttpListenerResponse objects. Estos objetos comparten algunas funciones con el HttpWebRequest y HttpWebResponse objetos, pero los objetos de este últimos no se puede usar junto con HttpListener porque implementan cliente, no de servidor, los comportamientos.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.

Un HttpListener puede requerir la autenticación de cliente.An HttpListener can require client authentication. Puede especificar un esquema concreto que se usará para la autenticación, o puede especificar a un delegado que determina el esquema que se usará.You can either specify a particular scheme to use for authentication, or you can specify a delegate that determines the scheme to use. Necesita 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, consulte el User, AuthenticationSchemes, y AuthenticationSchemeSelectorDelegate propiedades.For additional information, see the User, AuthenticationSchemes, and AuthenticationSchemeSelectorDelegate properties.

Nota

Si creas 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. En caso contrario, un HttpWebRequest consultas de este HttpListener se producirá un error con el 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 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 archivo ejecutable suministrará 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 el HttpListener, el agente de escucha supondrán un reto para los clientes en el siguiente orden: Negotiate, NTLM, Digesty, a continuación, Basic.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: