在我的应用程序中,我允许用户下载大约(100MB)的大文件,这些文件是动态创建的,并直接流式传输给用户而无需存储在文件系统上。虽然它不会一直打破,但它很少发生,也很难复制。为了正确测试它,我通过以下类创建了一个沙箱环境:
public class MvcController : Controller
{
public ActionResult TestWait(int timeToWait = 6000)
{
return new TestWaitResult(timeToWait);
}
}
public class TestWaitResult : ActionResult
{
int _timeToWait;
object o = new object();
TextWriter output;
int _sleepTimer;
public TestWaitResult(int timeToWait)
{
_timeToWait = timeToWait;
_sleepTimer = 10;
}
public override void ExecuteResult(ControllerContext context)
{
context.HttpContext.Response.Buffer = context.HttpContext.Response.BufferOutput = false;
output = context.HttpContext.Response.Output;
while (true)
{
Log("Executing...");
System.Threading.Thread.Sleep(_sleepTimer * 1000);
if ((_timeToWait = _timeToWait - _sleepTimer) <= 0)
{
Log("Timetowait exceeds");
break;
}
}
}
private void Log(string message)
{
lock (o)
{
output.WriteLine("<br/>{0} : {1}", DateTime.Now.ToString("hh:mm:ss.fff"), message);
output.Flush();
}
}
我尝试创建上述代码更简单,以便了解问题。
我在服务器上部署了代码
http://msongs-test.apphb.com/mvc/testwait?timeToWait=6000
并且,经过测试,我发现10-15分钟后响应意外中断。并且,我没有任何线索,它有什么休息。我将非常高兴地知道问题的根本原因。
PS:虽然我在本地IIS上部署它时代码运行正常
Edit1:我检查了日志,发现已经记录了两个连续的错误 1. HttpException:在发送HTTP标头后,服务器无法设置状态。 2. HttpException:远程主机关闭了连接。错误代码是0x800704CD。