Asp.net mvc 手术被取消了。在System.Threading.CancellationToken.ThrowIfCancellationRequested()中

Asp.net mvc 手术被取消了。在System.Threading.CancellationToken.ThrowIfCancellationRequested()中,asp.net-mvc,asp.net-web-api,Asp.net Mvc,Asp.net Web Api,我正在使用最新版本的WebAPI。我的WebAPI返回RSS提要数据。我用blitz做了负载测试,下面是测试结果 这次冲刺在300秒内成功命中115908次,我们 在应用程序内外传输1.91 GB数据。平均命中率 每秒386.36次的点击率相当于每天33381504次。这个 平均响应时间为410毫秒。不过,您还有更大的问题: 在这一高峰期间,0.87%的用户遇到超时或错误 返回RSS的WebAPI的代码如下所示。它使用来自的OutPutCache库 在 System.Web.Http.WebHo

我正在使用最新版本的WebAPI。我的WebAPI返回RSS提要数据。我用blitz做了负载测试,下面是测试结果

这次冲刺在300秒内成功命中115908次,我们 在应用程序内外传输1.91 GB数据。平均命中率 每秒386.36次的点击率相当于每天33381504次。这个 平均响应时间为410毫秒。不过,您还有更大的问题: 在这一高峰期间,0.87%的用户遇到超时或错误

返回RSS的WebAPI的代码如下所示。它使用来自的OutPutCache库

在 System.Web.Http.WebHost.HttpControllerHandler.d_1b.MoveNext() ---来自引发异常的上一个位置的堆栈结束跟踪---在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()位于 System.Runtime.CompilerServices.TaskWaiter.ThrowForNonSuccess(任务 任务)在 System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在 System.Web.Http.WebHost.HttpControllerHandler.d__7.MoveNext() ---来自引发异常的上一个位置的堆栈结束跟踪---在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()位于 System.Runtime.CompilerServices.TaskWaiter.ThrowForNonSuccess(任务 任务)在 System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在 System.Web.Http.WebHost.HttpControllerHandler.d__0.MoveNext() ---来自引发异常的上一个位置的堆栈结束跟踪---在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()位于 System.Runtime.CompilerServices.TaskWaiter.ThrowForNonSuccess(任务 任务)在 System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)位于System.Web.TaskAsyncHelper.EndTask(IAsyncResult ar)处 System.Web.HttpApplication.CallHandlerExecutionStep.OnAsyncHandlerCompletion(IAsyncResult ar)


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

我有5.2.2.0,每次取消ajax请求时,我都会遇到这些严重错误。这sucks@Toolkit,我们不知道您所描述的实际发生的场景。如果您可以在aspnetwebstack.codeplex.com中打开一个问题并上载一个复制项目,这将非常有用。您可以详细说明您遇到的异常情况吗?如果它是
TaskCancelledException
,您可以安全地忽略它,但我们确实希望看到该场景。@Toolkit您还可以让我们知道您是否正在使用异常筛选器或IEExceptionHandler/IEExceptionFilteri通过忽略此类错误来解决它。看到我在需要进行即时搜索时遇到的答案了吗?我需要取消上一个ajax请求,这样它就不会与下一个请求重叠了。注意,WebAPI中有两种异常处理机制。您的答案涉及异常过滤器,它总是对TaskCancelledException做出反应。用户询问异常记录器和过滤它们的GlobalExceptionHandler。异常过滤器包装操作执行,而其他两个过滤器则在用户代码或框架代码中抛出异常的任何地方报告异常(即使默认情况下框架将吞并该异常)。看来你的答案是正确的,只是针对一个不同的问题:)
[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") };

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