Nancy を使用して単純な Web アプリケーションを作成しています。少なくとも 1 つのリクエストで長さが不明なストリームが発生したため、提供できませんContent-Length
。Transfer-Encoding: chunked
、または (この場合は同様に許容されます)を使用したいと思いConnection: close
ます。
Nancy のソース コードを簡単にハックして、 とResponse.BufferOutput
に設定HttpContext.Response.BufferOutput
するコードを追加しましたfalse
。ここでそれを見ることができます:
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);
}
};
}
}
効果はないようです。5 秒後に一斉に応答が返ってきます。これを単純なWebRequest
ベースのクライアントでテストしました。
Nancy でチャンク出力を機能させるにはどうすればよいですか? 私は ASP.NET ホスティングを使用していますが、他のホスティング オプションの回答に興味があります。
を使用して単純なサーバーを作成する場合HttpListener
、 に設定SendChunked
するとtrue
、チャンクされた出力が送信され、単純なクライアントはチャンクで正しく受信します。