流式传输大文件意外中断

时间:2014-02-08 14:22:21

标签: c# asp.net-mvc iis .net-4.0

在我的应用程序中,我允许用户下载大约(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。

0 个答案:

没有答案