2014-05-14 98 views
2

我目前正在玩一個異步的WebAPI控制器,服務圖像,我面臨一個奇怪的行爲。異步WebAPI控制器服務圖像 - 掛起的HTTP請求

簡短情況是: Controller通過ID獲取Image並從數據庫通過EF6加載它。 blobresult包含文件名,contentType和數據爲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,也會發生這種情況。這兩個版本都與同步版本配合良好。

我錯過了什麼?

+0

你在.NET 4.5,並有'targetFramework'設置爲'4.5'在您的網頁。配置? –

+0

是 - config&project中的targetFramework =「4.5」。 webapp甚至依賴於一些.NET 4.5程序集。 –

回答

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