Clase System.Net.HttpListener

En este artículo se proporcionan comentarios adicionales a la documentación de referencia de esta API.

Con la HttpListener clase , puede crear un agente de escucha de protocolo HTTP simple que responda a las solicitudes HTTP. El agente de escucha está activo durante la vigencia del HttpListener objeto y se ejecuta dentro de la aplicación con sus permisos.

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 qué prefijos de identificador uniforme de recursos (URI) debe HttpListener procesar.

Una cadena de prefijo de URI se compone de un esquema (http o https), un host, un puerto opcional y una ruta de acceso opcional. Un ejemplo de una cadena de prefijo completa es http://www.contoso.com:8080/customerData/. Los prefijos deben terminar en una barra diagonal ("/"). El HttpListener objeto con el prefijo que coincide más estrechamente con un URI solicitado responde a la solicitud. Varios HttpListener objetos no pueden agregar el mismo prefijo; se produce una Win32Exception excepción si agrega HttpListener un prefijo que ya está en uso.

Cuando se especifica un puerto, el elemento host se puede reemplazar por "*" para indicar que HttpListener acepta las solicitudes enviadas al puerto si el URI solicitado no coincide con ningún otro prefijo. Por ejemplo, para recibir todas las solicitudes enviadas al puerto 8080 cuando el URI solicitado no se controla mediante ningún HttpListener, el prefijo es http://*:8080/. Del mismo modo, para especificar que HttpListener acepta todas las solicitudes enviadas a un puerto, reemplace el elemento host por el carácter "+". Por ejemplo, https://+:8080. Los caracteres "*" y "+" pueden estar presentes en prefijos que incluyen rutas de acceso.

Los subdominios comodín se admiten en prefijos de URI administrados por un HttpListener objeto . Para especificar un subdominio de caracteres comodín, use el carácter "*" como parte del nombre de host en un prefijo de URI. Por ejemplo, http://*.foo.com/. Pase esto como argumento al Add método .

Advertencia

No se deben usar enlaces comodín de nivel superior (http://*:8080/ y http://+:8080) . Los enlaces de carácter comodín de nivel superior pueden exponer su aplicación a vulnerabilidades de seguridad. Esto se aplica tanto a los caracteres comodín fuertes como a los débiles. Use nombres de host explícitos en lugar de caracteres comodín. 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). Vea la sección 5.4 de RFC 7230 para obtener más información.

Para empezar a escuchar las solicitudes de los clientes, agregue los prefijos de URI a la colección y llame al Start método . HttpListener ofrece modelos sincrónicos y asincrónicos para procesar solicitudes de cliente. Se accede a las solicitudes y sus respuestas asociadas mediante el HttpListenerContext objeto devuelto por el GetContext método o sus homólogos asincrónicos, los BeginGetContext métodos y EndGetContext .

El modelo sincrónico es adecuado si la aplicación debe bloquearse mientras espera una solicitud de cliente y si desea procesar solo una solicitud a la vez. Con el modelo sincrónico, llame al GetContext método , que espera a que un cliente envíe una solicitud. El método devuelve un HttpListenerContext objeto para su procesamiento cuando se produce uno.

En el modelo asincrónico más complejo, la aplicación no se bloquea mientras espera las solicitudes y cada solicitud se procesa en su propio subproceso de ejecución. Use el BeginGetContext método para especificar un método definido por la aplicación al que se llamará para cada solicitud entrante. Dentro de ese método, llame al EndGetContext método para obtener la solicitud, procesarla y responder.

En cualquier modelo, se accede a las solicitudes entrantes mediante la HttpListenerContext.Request propiedad y se representan mediante HttpListenerRequest objetos . De forma similar, se accede a las respuestas mediante la HttpListenerContext.Response propiedad y se representan mediante HttpListenerResponse objetos . Estos objetos comparten alguna funcionalidad con los HttpWebRequest objetos y HttpWebResponse , pero estos últimos objetos no se pueden usar junto con HttpListener porque implementan comportamientos de cliente, no servidor.

Un HttpListener puede requerir la autenticación de cliente. Puede especificar un esquema determinado que se usará para la autenticación o puede especificar un delegado que determine el esquema que se va a usar. Debe requerir alguna forma de autenticación para obtener información sobre la identidad del cliente. Para obtener más información, vea las Userpropiedades , AuthenticationSchemesy AuthenticationSchemeSelectorDelegate .

Nota:

Si crea un HttpListener mediante https, debe seleccionar un certificado de servidor para ese agente de escucha. De lo contrario, las solicitudes a esto HttpListener producirán un error con un cierre inesperado de la conexión.

Nota:

Puede configurar certificados de servidor y otras opciones de escucha mediante el Shell de red (netsh.exe). Consulte Network Shell (Netsh) para obtener más información. El ejecutable comenzó a enviarse con Windows Server 2008 y Windows Vista.

Nota:

Si especifica varios esquemas de autenticación para HttpListener, el agente de escucha desafiará a los clientes en el orden siguiente: Negotiate, NTLM, Digesty, a continuación Basic, .

HTTP.sys

La HttpListener clase se basa en , que es el agente de HTTP.sysescucha en modo kernel que controla todo el tráfico HTTP para Windows. HTTP.sys proporciona administración de conexiones, limitación de ancho de banda y registro del servidor web. Use la herramienta HttpCfg.exe para agregar certificados SSL.