我正在使用最新版本的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)
答案 0 :(得分:0)
这看起来像已取消的请求,被Web API自动取消。您通常可以忽略这些错误(并且它们不会出现在从Web API 5.2开始的全局错误处理中)。