AppHarbor中的长时间运行请求自动中断

时间:2014-02-23 14:14:57

标签: c# asp.net asp.net-mvc appharbor

我在appharbor上运行了一个代码,我将一些数据传输到客户端。它的请求响应非常长,理想情况下可能需要30-40分钟。

流式传输的内容是非缓冲的,这意味着响应不会保持很长时间,但会尽快写入,并将持续到指定的时间。我已经提到了下面的代码,但应用程序在响应10分钟后就崩溃了。有人可以告诉我这里发生了什么错误。

public class TestWaitResult : ActionResult
{
    int _timeToWait;
    object o = new object();
    TextWriter output;
    HttpResponseBase r;
    int _sleepTimer;
    public TestWaitResult(int timeToWait, int sleepTimer)
    {
        _timeToWait = timeToWait;
        _sleepTimer = sleepTimer;
    }

    public override void ExecuteResult(ControllerContext context)
    {
        context.HttpContext.Response.Buffer = context.HttpContext.Response.BufferOutput = false;
        r = context.HttpContext.Response;
        output = context.HttpContext.Response.Output;
        while (r.IsClientConnected)
        {
            Log("Executing...");
            System.Threading.Thread.Sleep(_sleepTimer * 1000);
            if ((_timeToWait = _timeToWait - _sleepTimer) <= 0)
            {
                Log("Timetowait exceeds");
                break;
            }
        }
    }

    private void Log(string message)
    {
        lock (o)
        {
            try
            {
                if (r.IsClientConnected)
                {
                    output.WriteLine("<br/>{0} : {1}", DateTime.Now.ToString("hh:mm:ss.fff"), message);
                }
            }
            catch (Exception ex)
            {
                throw;
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

AppHarbor有120秒的难度request timeout as specified in the program policy

您应该以background worker或类似方式重新执行任务,并使文件可从S3下载。