C# 为映像提供服务的异步WebAPI控制器-挂起的HTTP请求

C# 为映像提供服务的异步WebAPI控制器-挂起的HTTP请求,c#,image,asynchronous,asp.net-web-api,C#,Image,Asynchronous,Asp.net Web Api,我目前正在使用一个为图像服务的异步WebAPI控制器,我面临一个奇怪的行为 简短的设想是: 控制器通过ID获取一个映像,并通过EF6从数据库中加载它。 blobresult包含文件名、contentType和字节[]形式的数据。 我有一个小的图像库,可能+100,通过标准的img标签指向控制器,如下所示: <img src="//path/to/webapicontroller/1" /> 这或多或少是完整的代码: public class BlobImageControlle

我目前正在使用一个为图像服务的异步WebAPI控制器,我面临一个奇怪的行为

简短的设想是: 控制器通过ID获取一个映像,并通过EF6从数据库中加载它。 blobresult包含文件名、contentType和字节[]形式的数据。 我有一个小的图像库,可能+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;
    }
}
公共类BlobImageController:ApiController
{
公共异步任务获取(Guid id,[FromUri]整数宽度,[FromUri]整数高度)
{
var service=newblobservice();
//使用异步EF API通过EF从数据库中提取内容
var blobResult=await service.ReadAsync(id);
字符串contentType=blobResult.contentType;
var fileExtension=Path.GetExtension(blobResult.Filename);
var结果=新的HttpResponseMessage(HttpStatusCode.OK);
var stream=新的MemoryStream(blobREsult.content);
流位置=0;
结果.内容=新的流内容(流);
result.Content.Headers.ContentLength=stream.Length;
result.Content.Headers.ContentType=新的MediaTypeHeaderValue(ContentType);
返回结果;
}
}
问题是: 以前的synchronos控制器很好地实现了这一点,但在这个异步版本中,浏览器只下载前7-10个映像,所有其他请求都处于挂起状态。服务器端没有加载—它被卡在某个地方。 如果我使用另一个浏览器,它也会与前7个浏览器一起工作,并且我在服务器端只收到7个请求

当我查看Chrome开发工具时,未完成的请求都是挂起的,而成功的请求是“OK”

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


我错过了什么?

找到了:我还使用了一瞥ASP.NET MVC包。当我从system.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上打开了一个问题:

您是否在.NET 4.5上,并且在web.config中将
targetFramework
设置为
4.5
?是-targetFramework=“4.5”在配置和项目中。webapp甚至依赖于一些.NET 4.5程序集。