2011-06-03 8 views
5

He desarrollado una herramienta de administración donde uso un HTTPListener simple para devolver páginas HTML. Todo funciona bien con IE y FF pero me estoy poniendo un ProtocolViolationException al utilizar Google Chrome .Obtener una ProtocolViolationException con Google Chrome y HTTPListener

Este es el código simplificado (levantado de listener.BeginGetContext) que produce el error:

byte[] buffer = System.Text.Encoding.UTF8.GetBytes("<html><body>response sent!</body></html>"); 
context.Response.ContentLength64 = buffer.Length; 
context.Response.OutputStream.Write(buffer, 0, buffer.Length); //<-- crashes here 
context.Response.OutputStream.Close(); 
context.Response.Close(); 

La excepción

Bytes que se escriben en la corriente supere los bytes Content-Length tamaño especificado.

se lanza desde la línea de

context.Response.OutputStream.Write (buffer, 0, buffer.Length);

¿Qué Chrome hace o deja de hacer para producir este error?

Gracias

Respuesta

5

sé que es un poco demasiado tarde, pero he encontrado con este problema (no con Chrome) y encontraron esta pregunta. Este código aparentemente a prueba de balas falla cuando intenta escribir algo en OutputStream en respuesta a una solicitud HEAD. ContentLength64 se establece en 0 y, por algún motivo, no se produce ninguna excepción cuando intenta cambiarlo, el nuevo valor se ignora silenciosamente.

+2

Para el registro, al menos debe llamar de cerca al flujo de respuesta cuando recibe una solicitud HEAD, de lo contrario, se quedará atascado. – pierrecouzy

Cuestiones relacionadas