我已经在我的VM(具有.net Framework 4.5.2,带有所有更新的Windows Server 2012 R2)中托管了一个WebAPI(使用最新版本)。
WebAPI代码从我的博客(外部公共URL)返回RSS feed。
这是相同的代码。
我正在使用它来缓存WebAPI输出。
[AllowAnonymous]
[CacheOutput(ServerTimeSpan = 9000, ExcludeQueryStringFromCacheKey = false)]
[HttpGet]
public async Task<HttpResponseMessage> GetRecentPost(string type)
{
string responseFromServer;
WebRequest request = null;
request = WebRequest.Create("My_EXTERNAL_BLOG_URL_HERE");
using (var response = await request.GetResponseAsync())
{
using (var dataStream = response.GetResponseStream())
{
using (var reader = new StreamReader(dataStream))
{
responseFromServer = await reader.ReadToEndAsync();
}
}
}
return new HttpResponseMessage() { Content = new StringContent(responseFromServer, Encoding.UTF8, ContentType) };
}
从IIS可以看出,很少有请求会保留很长时间。
可能是什么原因?其次,我发现该应用程序每分钟可处理约300个请求。在上述代码中进行async-wait是一个好习惯吗?
您的代码是正确的。正在使用最佳做法。
这里没有什么可以暗示过度的延迟。显然,后端URL响应缓慢。您可以通过使用Fiddler观察传入和传出的HTTP请求来检验该理论。如果要使用IIS进行调试,请确保在web.config文件中配置Fiddler代理。
您应该看到对博客的传出请求花费了很长时间。
IIS窗口显示所有请求都停留在执行请求处理程序(这是您的代码)中。显然,由于某些原因,您应用的缓存属性没有使用。我不熟悉该属性。没有内置的标准属性可以使用吗?
或者,您只是请求所有不同的URL,这将导致缓存无法使用。
使用await是否是一个好主意的问题实际上归结为另一个问题:何时应该使用异步IO?我将总结我现有的详细响应:将其用于耗时较长且经常被调用的操作。另请参阅。
这种情况对于异步IO是一个非常好的用例。await
是实现异步IO的最现代的方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句