OWIN IIS主机死锁

时间:2015-05-08 11:54:39

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

我选择将OWIN IIS主机用于某个具体项目,当我想从Web API资源发送请求时,我陷入了僵局。

这里是Startup班级代码:

[assembly: Microsoft.Owin.OwinStartup(typeof(MyProduct.IdentityClient.Startup))]

namespace MyProduct.IdentityClient
{
    using Newtonsoft.Json.Serialization;
    using Owin;
    using ServerMyWeb.Shared.Http;
    using System.Web.Http;

    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            HttpConfiguration config = new HttpConfiguration();
            config.MapHttpAttributeRoutes();

            app.UseWebApi(config);
        }
    }
}

我已经实现了某种代理,它可以向其他API(即另一台主机)提供实际的HTTP请求。当我执行该请求时,代理Web API进入死锁状态。

    // Simplified sample of proxying a HTTP/GET request
    public virtual Task<HttpResponseMessage> Get(string apiRelativeUri)
    {            
        HttpRequestMessage request = ControllerContext.Request;

        request.RequestUri = new Uri("[URI to some API]");

        // Client == HttpClient singleton
        // HERE IS THE DEADLOCK. Client.SendAsync never returns/continues
        HttpResponseMessage response = await Client.SendAsync(request);

        // Some stuff to maniuplate response message... 

        return response;
    }

我已经完成了类似的实现,它在OWIN / Katana中运行,我确信这与IIS进程和线程模型有关,它有副作用(也许请求线程可以&#39 ;在HttpClient.SendAsync结束异步操作后,恢复继续...)。

您是否有关于此问题的任何有关OWIN IIS托管的问题和可能的解决方案(或者我在IIS上托管OWIN时跳过了一些配置步骤?)?

注意:在执行我的代码期间,没有Task.ResultTask.WaitTask.WaitAll或类似内容。

UPDATE:

我可以确认这是OWIN IIS托管的一个问题,因为我已经最低限度地重构了ASP.NET Web API初始化以使用旧式Global.asaxGlobalConfiguration,以及相同的代码工作完美无缺。

0 个答案:

没有答案