IIS WP请求永远存在

NoobDeveloper

我已经在我的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是一个好习惯吗?

usr

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

这里没有什么可以暗示过度的延迟。显然,后端URL响应缓慢。您可以通过使用Fiddler观察传入和传出的HTTP请求来检验该理论。如果要使用IIS进行调试,请确保在web.config文件中配置Fiddler代理。

您应该看到对博客的传出请求花费了很长时间

IIS窗口显示所有请求都停留在执行请求处理程序(这是您的代码)中。显然,由于某些原因,您应用的缓存属性没有使用。我不熟悉该属性。没有内置的标准属性可以使用吗?

或者,您只是请求所有不同的URL,这将导致缓存无法使用。

使用await是否是一个好主意的问题实际上归结为另一个问题:何时应该使用异步IO?我将总结我现有的详细响应:将其用于耗时较长且经常被调用的操作。另请参阅。

这种情况对于异步IO是一个非常好的用例await是实现异步IO的最现代的方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章