2014-02-23 83 views
0

我有一個運行在appharbor上的代碼,其中我將一些數據傳輸到客戶端。理想情況下,它需要的時間非常長,可能需要30-40分鐘。長時間運行請求在AppHarbor中自動中斷

獲得流式傳輸的內容是非緩衝式的,這意味着響應不會持續很長時間,但會被asap寫入,並會一直持續到指定的時間。我已經提到了下面的代碼,但是應用程序在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; 
      } 
     } 
    } 
} 

回答

相關問題