次のコード行を含む ASP.NET ページがあるとします。
while (true)
{
byte[BUFFER_SIZE] buffer;
// Fill buffer with pseudo data
Response.OutputStream.Write(buffer, 0, buffer.Length);
Response.Flush();
}
次のコード行を含む、上記のページのテスト アプリケーションもあります。
while (readBytes != 0)
{
byte[BUFFER_SIZE] buffer;
readBytes = stream.Read(buffer, 0, buffer.length)
}
実際に巨大なファイルを読み取る代わりに、その場でランダムなバイナリ データを生成してクライアントに転送しようとしたところ、問題なく動作しました。次に、ASP.NET ページからバイトを読み取るだけで何もせず、ASP.NET ページによって接続が閉じられる (ダウンロードが終了する) まで次のバイトを読み取るクライアントを作成しました。ダウンロードをいつ終了するかについて、ASP.NET ページで時間ベースの設定を使用しました (これはストレス テストです)。
したがって、IIS 7.0 と ASP.NET が行っているのは、一定期間 (つまり 1 時間) のデータのストリーミングです。このページで 100 の同時クライアントを開始し、平均ダウンロード速度は 1 時間で 250 KB/秒でした。約 45 分間はすべて問題ありませんでしたが、IIS は突然、クライアント側で次のエラー コードを表示してすべての接続を閉じます。
トランスポート接続からデータを読み取れません: 接続が閉じられました。
IIS 経由で大量のバイナリ データを転送することだと思います。IIS 7.0 には、私のストレス テストによってトリガーされる構成が必要ですが、どの構成でしょうか。