假设您有一个包含以下代码行的 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 正在做的是在一段时间(即一小时)内流式传输数据。我在这个页面上启动了 100 个并发客户端,平均下载速度为 250 KB/s,一小时。大约 45 分钟一切正常,但 IIS 突然在客户端关闭了所有连接并出现此错误代码:
无法从传输连接读取数据:连接已关闭。
我想这是关于通过 IIS 传输大量二进制数据,并且 IIS 7.0 中应该有一些配置,这是由我的压力测试触发的,但是是哪个配置。