Estoy escribiendo una aplicación web simple usando Nancy. Al menos una solicitud da como resultado una transmisión de longitud desconocida, por lo que no puedo proporcionar Content-Length
. Me gustaría usar Transfer-Encoding: chunked
, o (igualmente aceptable en este caso, Connection: close
).¿Cómo escribo el flujo de salida en NancyFX?
He tenido un truco rápido en el código fuente de Nancy, y he agregado Response.BufferOutput
, y el código para establecer HttpContext.Response.BufferOutput
en . Puede verlo aquí:
public class HomeModule : NancyModule
{
public HomeModule()
{
Get["/slow"] = _ => new SlowStreamResponse();
}
private class SlowStreamResponse : Response
{
public SlowStreamResponse()
{
ContentType = "text/plain";
BufferOutput = false;
Contents = s => {
byte[] bytes = Encoding.UTF8.GetBytes("Hello World\n");
for (int i = 0; i < 10; ++i)
{
s.Write(bytes, 0, bytes.Length);
Thread.Sleep(500);
}
};
}
}
No parece tener ningún efecto. La respuesta aparece de una vez, después de 5 segundos. He probado esto como un cliente simple basado en WebRequest
.
¿Cómo puedo obtener salida fragmentada para trabajar en Nancy? Estoy usando el alojamiento ASP.NET, pero me interesarían las respuestas para las otras opciones de alojamiento.
Si escribo un servidor simple usando HttpListener
, puedo establecer SendChunked
a true
, y envía la salida fragmentada, que mi sencilla cliente recibe correctamente en trozos.
¿Dónde estableciste el HttpContext.Response.BufferOutput en el código de Nancy? ¿Y alguna vez encontró la manera de hacer que esto funcione con OWIN? – Hooligancat
No lo recuerdo, lo siento. –
vea la respuesta marcada en esta pregunta => http://stackoverflow.com/questions/29953301/stream-an-sqlfile-stream-using-nancy – sp3tsnaz