该操作被取消。在System.Threading.CancellationToken.ThrowIfCancellationRequested()

时间:2014-05-04 18:58:27

标签: asp.net-mvc asp.net-web-api

我正在使用最新版本的WebAPI。我的WebAPI返回RSS提要数据。我用闪电战进行了负载测试,结果如下。

  

这次冲刺在300秒内产生了115,908次成功命中,我们   将1.91 GB的数据传入和传出您的应用。平均命中率   率为386.36 /秒转换为约33,381,504次点击/天。该   平均响应时间为410毫秒。但是你遇到了更大的问题:   在这次抢购期间,有0.87%的用户遇到了超时或错误!

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

中的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") };

        }

以下是相同

的错误日志
  

异常信息:       异常类型:OperationCanceledException       异常消息:操作已取消。在System.Threading.CancellationToken.ThrowIfCancellationRequested()
  在   System.Web.Http.WebHost.HttpControllerHandler.d__1b.MoveNext()   ---从抛出异常的先前位置开始的堆栈跟踪结束--- at   System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()at   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务   任务)   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务   任务)   System.Web.Http.WebHost.HttpControllerHandler.d__7.MoveNext()   ---从抛出异常的先前位置开始的堆栈跟踪结束--- at   System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()at   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务   任务)   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务   任务)   System.Web.Http.WebHost.HttpControllerHandler.d__0.MoveNext()   ---从抛出异常的先前位置开始的堆栈跟踪结束--- at   System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()at   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务   任务)   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务   任务)在System.Web.TaskAsyncHelper.EndTask(IAsyncResult ar)at   System.Web.HttpApplication.CallHandlerExecutionStep.OnAsyncHandlerCompletion(IAsyncResult的   AR)

     

主题信息:

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

在   System.Web.Http.WebHost.HttpControllerHandler.d__1b.MoveNext()   ---从抛出异常的先前位置开始的堆栈跟踪结束--- at   System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()at   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务   任务)   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务   任务)   System.Web.Http.WebHost.HttpControllerHandler.d__7.MoveNext()   ---从抛出异常的先前位置开始的堆栈跟踪结束--- at   System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()at   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务   任务)   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务   任务)   System.Web.Http.WebHost.HttpControllerHandler.d__0.MoveNext()   ---从抛出异常的先前位置开始的堆栈跟踪结束--- at   System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()at   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务   任务)   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务   任务)在System.Web.TaskAsyncHelper.EndTask(IAsyncResult ar)at   System.Web.HttpApplication.CallHandlerExecutionStep.OnAsyncHandlerCompletion(IAsyncResult的   AR)

1 个答案:

答案 0 :(得分:0)

这看起来像已取消的请求,被Web API自动取消。您通常可以忽略这些错误(并且它们不会出现在从Web API 5.2开始的全局错误处理中)。