我在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;
}
}
}
}
答案 0 :(得分:0)
AppHarbor有120秒的难度request timeout as specified in the program policy。
您应该以background worker或类似方式重新执行任务,并使文件可从S3下载。