Sto scrivendo una semplice applicazione web usando Nancy. Almeno una richiesta genera un flusso di lunghezza sconosciuta, quindi non posso fornire Content-Length
. Mi piacerebbe usare Transfer-Encoding: chunked
o (ugualmente accettabile in questo caso, Connection: close
).Come si scrive l'output in streaming in NancyFX?
Ho avuto un attacco rapido al codice sorgente di Nancy e ho aggiunto Response.BufferOutput
e codice per impostare HttpContext.Response.BufferOutput
su false
. Si può vedere che qui:
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);
}
};
}
}
Non sembra avere alcun effetto. La risposta si attiva tutto in una volta, dopo 5 secondi. Ho provato questo un semplice client basato su WebRequest
.
Come faccio a ottenere l'output Chunked su Nancy? Sto usando l'hosting ASP.NET, ma sarei interessato alle risposte per le altre opzioni di hosting.
Se scrivo un server semplice utilizzando HttpListener
, posso impostare SendChunked
a true
, ed invia in uscita Chunked, che il mio semplice client riceve correttamente in blocchi.
Dove hai impostato HttpContext.Response.BufferOutput nel codice Nancy? E hai mai trovato un modo per farlo funzionare con OWIN? – Hooligancat
Non ricordo, mi dispiace. –
vedi la risposta contrassegnata su questa domanda => http://stackoverflow.com/questions/29953301/stream-an-sqlfile-stream-using-nancy – sp3tsnaz