异步WebAPI控制器服务图像-等待HTTP请求

本文关键字:等待 HTTP 请求 图像 WebAPI 控制器 服务 异步 | 更新日期: 2023-09-27 18:03:18

我目前正在玩一个异步WebAPI控制器,提供图像,我正面临一个奇怪的行为。

简短的场景是:控制器通过ID获取图像,并通过EF6从数据库加载它。blobresult包含文件名、内容类型和byte[]形式的数据。我有一个小图片库,可能有+100,通过标准img标签指向控制器,如下所示:

<img src="//path/to/webapicontroller/1" />

这几乎是完整的代码:

public class BlobImageController : ApiController
{
    public async Task<HttpResponseMessage> Get(Guid id, [FromUri]int width, [FromUri]int height)
    {
        var service = new BlobService();
        // pull stuff via EF from database using async EF APIs
        var blobResult = await service.ReadAsync(id);
        string contentType = blobResult.ContentType;
        var fileExtension = Path.GetExtension(blobResult.Filename);
        var result = new HttpResponseMessage(HttpStatusCode.OK);
        var stream = new MemoryStream(blobREsult.content);
        stream.Position = 0;
        result.Content = new StreamContent(stream);
        result.Content.Headers.ContentLength = stream.Length;
        result.Content.Headers.ContentType = new MediaTypeHeaderValue(contentType);
        return result;
    }
}

问题:之前的同步控制器可以很好地实现这一点,但是在这个异步版本中,浏览器只下载前7-10个图像,而其他所有请求都处于等待状态。服务器端没有负载——它卡在某个地方了。如果我使用另一个浏览器,它也可以处理前7个请求,我在服务器端只收到7个请求。

当我查看Chrome开发工具时,未完成的请求都是待处理的,而成功的请求是"OK"。

如果我使用ByteArrayContent,也会发生这种情况。这两个版本都可以很好地使用synchronos版本。

我错过了什么?

异步WebAPI控制器服务图像-等待HTTP请求

找到了:我也使用了瞥见ASP。. NET MVC包。当我从系统中移除瞥见模块时。WebServer配置,然后一切工作如预期。

我用这个包做了测试:

 <package id="Glimpse" version="1.8.2" targetFramework="net45" />
 <package id="Glimpse.AspNet" version="1.8.0" targetFramework="net45" />
 <package id="Glimpse.Mvc5" version="1.5.3" targetFramework="net45" />

我在GitHub上打开了一个问题:https://github.com/Glimpse/Glimpse/issues/797