C# IIS WP请求将永远保留

C# IIS WP请求将永远保留,c#,iis,asp.net-web-api,async-await,C#,Iis,Asp.net Web Api,Async Await,我在我的虚拟机中托管了一个WebAPI(使用最新版本)(具有.net framework 4.5.2、Windows Server 2012 R2以及所有更新) WebAPI代码从我的博客(外部公共URL)返回RSS提要 下面是相同的代码 我正在使用缓存WebAPI输出 [AllowAnonymous] [CacheOutput(ServerTimeSpan = 9000, ExcludeQueryStringFromCacheKey = false)] [Htt

我在我的虚拟机中托管了一个WebAPI(使用最新版本)(具有.net framework 4.5.2、Windows Server 2012 R2以及所有更新)

WebAPI代码从我的博客(外部公共URL)返回RSS提要

下面是相同的代码

我正在使用缓存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) };
        }
[AllowAnonymous]
[CacheOutput(ServerTimeSpan=9000,ExcludeQueryStringFromCacheKey=false)]
[HttpGet]
公共异步任务GetRecentPost(字符串类型)
{
字符串响应服务器;
WebRequest=null;
request=WebRequest.Create(“My_EXTERNAL_BLOG_URL_HERE”);
使用(var response=wait request.GetResponseAsync())
{
使用(var dataStream=response.GetResponseStream())
{
使用(变量读取器=新的流读取器(数据流))
{
responseFromServer=wait reader.ReadToEndAsync();
}
}
}
返回新的HttpResponseMessage(){Content=newStringContent(responseFromServer,Encoding.UTF8,ContentType)};
}
我可以从IIS中看到,很少有请求会停留很长时间


原因可能是什么其次,我发现该应用程序每分钟提供大约300个请求。在上述代码中使用async Wait是否是一种好的做法?

您的代码是正确的。正在使用最佳做法

这里没有任何迹象表明过度拖延。显然,后端URL响应缓慢。您可以通过使用Fiddler观察传入和传出HTTP请求来测试这一理论。确保在web.config文件中配置Fiddler代理,以防使用IIS进行调试

您应该看到,向您的博客发送请求需要很长时间

IIS窗口显示执行请求处理程序(这是您的代码)时所有请求都被卡住。显然,由于某些原因,应用的缓存属性没有采用。我不熟悉这个属性。难道没有一个内置的标准属性可以使用吗

或者,您只是请求所有不同的URL,这会导致缓存不起作用

使用wait是否是一个好主意的问题实际上可以归结为一个不同的问题:我将总结我现有的详细回答:将它用于需要很长时间并且经常被调用的操作


这个案例是异步IO的一个非常好的用例
Wait
是实现异步IO的最现代的方法。

使用搜索引擎了解如何配置Fiddler。这很容易。搜索词将是“Fiddler IIS”;我不熟悉WebAPI或CacheCow。也许缓存可以工作,但您请求的URL大多不同。