提供图像的异步WebAPI控制器 - 待处理的HTTP请求

时间:2014-05-14 19:13:10

标签: c# image asynchronous asp.net-web-api

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

短期情景是: Controller通过ID获取Image,并通过EF6从数据库加载它。 blobresult包含文件名,contentType和data []的数据。 我有一个可能+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开发工具时,未完成的请求都处于待处理状态,而成功的请求是“正常”。

如果我使用ByteArrayContent,也会发生这种情况。这两个版本都与同步版本配合良好。

我想念什么?

1 个答案:

答案 0 :(得分:1)

找到它:我还使用了Glimpse ASP.NET MVC包。当我从system.WebServer配置中删除Glimpse模块时,一切都按预期工作。

我用这个包进行了测试:

 <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