2014-05-04 55 views
1

我正在使用最新版本的WebAPI。我的WebAPI返回RSS提要數據。我用閃電戰做了負載測試,下面是它的結果。該操作已取消。在System.Threading.CancellationToken.ThrowIfCancellationRequested()

此衝擊在300秒內生成115,908次成功點擊,我們 將1.91 GB數據傳入和傳出您的應用。平均命中率爲每秒386.36次,平均命中率爲33,381,504次/天。平均響應時間爲410毫秒。但是,您遇到的問題更大: 在此次搶購中,0.87%的用戶遇到超時或錯誤!

返回RSS的WebAPI的代碼如下。它使用從https://github.com/filipw/AspNetWebApi-OutputCache

[AllowAnonymous] 
     [CacheOutput(ServerTimeSpan = 14400)] 
     [HttpGet] 
     public async Task<HttpResponseMessage> GetRssData() 
     { 

      string responseFromServer = string.Empty; 
      WebRequest request = WebRequest.Create("URL FOR MY RSS FEED HERE"); 


      using (WebResponse response = await request.GetResponseAsync()) 
      { 
       using (Stream dataStream = response.GetResponseStream()) 
       { 
        using (StreamReader reader = new StreamReader(dataStream)) 
        { 
         responseFromServer = await reader.ReadToEndAsync(); 
        } 
       } 
      } 

      return new HttpResponseMessage() { Content = new StringContent(responseFromServer, Encoding.UTF8, "application/rss+xml") }; 

     } 

的輸出緩存的lib下面是錯誤日誌相同

異常信息: 異常類型:OperationCanceledException 異常消息:該操作被取消。在System.Threading.CancellationToken.ThrowIfCancellationRequested()
在 System.Web.Http.WebHost.HttpControllerHandler.d__1b.MoveNext() ---從先前的位置在那裏引發異常堆棧跟蹤的結尾---在 系統.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任務 任務)在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任務 任務)在 System.Web.Http。 WebHost.HttpControllerHandler.d__7.MoveNext() ---拋出異常的先前位置的堆棧跟蹤結束---在 System.Runtime.Except ionServices.ExceptionDispatchInfo.Throw()在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任務 任務)在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任務 任務)在 System.Web.Http.WebHost.HttpControllerHandler .d__0.MoveNext() ---從先前的位置,其中引發異常堆棧跟蹤的末尾在在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()(任務 任務)在 System.Web.TaskAsyncHelper.EndTask(IAsyncResu)System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任務 任務) LT AR)在 System.Web.HttpApplication.CallHandlerExecutionStep.OnAsyncHandlerCompletion(IAsyncResult的 AR)

線程信息:

Stack trace: at System.Threading.CancellationToken.ThrowIfCancellationRequested() 

在 System.Web.Http.WebHost.HttpControllerHandler.d__1b.MoveNext() ---從先前的位置堆棧跟蹤其中的例外是在在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任務 任務)拋出---在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()結束System.Runtime.CompilerServices.TaskAwaiter。HandleNonSuccessAndDebuggerNotification(任務 任務)在 System.Web.Http.WebHost.HttpControllerHandler.d__7.MoveNext() ---從先前的位置在那裏引發異常---堆棧跟蹤的結尾在 System.Runtime.ExceptionServices.ExceptionDispatchInfo .Throw()在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任務 任務)在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任務 任務)在 System.Web.Http.WebHost.HttpControllerHandler.d__0。的MoveNext() ---從先前的位置在那裏引發異常堆棧跟蹤的結尾---在在012 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任務 任務)在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任務 任務)在System.Web.TaskAsyncHelper.EndTask(IAsyncResult的AR)在 System.Web.HttpApplication .CallHandlerExecutionStep.OnAsyncHandlerCompletion(IAsyncResult的 AR)

回答

0

這看起來像取消的要求,正在自動被Web API取消。您通常可以忽略這些錯誤(並且從Web API 5.2開始,它們不會顯示在全局錯誤處理上)。

+0

我5.2.2.0每次我取消Ajax請求的時間我還是讓這些討厭的錯誤。這很爛 – Toolkit

+1

@Toolkit,我們不知道你實際描述會發生什麼情況的。這將是非常有用的,如果你可以打開一個問題,上傳aspnetwebstack.codeplex.com 一個攝製項目,你能具體你做了什麼異常?如果是'TaskCancelledException'你可以放心地忽略它,但我們真的希望看到的情景。 –

+1

@Toolkit可你也讓我們知道,如果你使用的是異常過濾器或IExceptionHandler /個IExceptionFilter –