WebApi中的异步方法导致IIS ExecuteRequestHandler挂起

时间:2015-11-14 22:09:44

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

我的WebApi 2控制器中有以下方法

[Route("document/{documentGuid:Guid}/basic")]
[DocumentName("label")]
[HttpGet]
public async Task<HttpResponseMessage> BasicDocument(Guid documentGuid)
{
    byte[] data = await _documentsGenerator.CreateDocument(documentGuid);
    HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
    result.Content = new ByteArrayContent(data);
    result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
    result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
    {
        FileName = string.Format("document-{0}-basic.pdf", documentGuid)
    };
    return result;
}

当我从浏览器调用它来下载文件时,我得到了该文件,但是IIS工作者列表中的请求仍然未决:

enter image description here

如果我从方法中删除async / await代码,一切正常。我正在执行什么样的异步操作并不重要。只要我使用await SomeMethod()ExecuteRequestHandler就会挂起。可能是什么原因?

1 个答案:

答案 0 :(得分:0)

最可能的原因是某些运行时没有在.NET 4.5(或更新版本)中运行。

请确保:

  1. 您的应用程序的目标是.NET 4.5或更高版本。
  2. 您的应用在其httpRuntime.targetFramework中的属性web.config设置为适当的值(例如4.5)。