【问题标题】:HttpClient calls slow from Kestrel + IIS来自 Kestrel + IIS 的 HttpClient 调用缓慢
【发布时间】:2018-09-07 07:09:54
【问题描述】:

我有一个简单的 asp.net core 2.0 WebApi 应用程序在 IIS 反向代理后面的 Kestrel 中运行。单路由很简单,就是发出一个http请求:

using (HttpClient client = new HttpClient())            
{
    client.BaseAddress = new Uri("http://www.google.ca");               
    HttpResponseMessage response = await client.GetAsync("/search?q=test&oq=test");

    return Ok();
}

但是,此请求始终需要 2-3 秒才能完成。然而,如果我在没有 IIS 的情况下直接运行 Kestrel,相同的代码需要大约 100 毫秒。

我遵循所有 Microsoft docs 使用 IIS 配置红隼。

【问题讨论】:

    标签: iis reverse-proxy asp.net-core-2.0 dotnet-httpclient kestrel-http-server


    【解决方案1】:

    TL;DR 需要将 HttpClient 配置为不使用默认代理设置

    HttpClientHandler clientHandler = new HttpClientHandler();
    clientHandler.UseProxy = false;
    
    using (HttpClient client = new HttpClient(clientHandler))           
    { ... }
    

    长解释是 asp.net 尝试对每个请求使用机器的 default proxy configuration 设置。我的 IIS 配置为在访问受限的网络服务帐户下运行,因此最终会失败(可能是因为它无权访问注册表)来查找代理设置并直接连接。这个过程显然需要大约 2.5 秒。

    对于我的 kestrel 测试,我从命令行运行 dotnet .\api.dll,它使用我的登录凭据,并且可以成功访问代理设置。但是,在使用 IIS 时,它会在运行 IIS 的同一网络服务帐户下生成 dotnet 进程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-27
      • 1970-01-01
      • 2020-04-18
      • 2019-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-01
      相关资源
      最近更新 更多