use*_*318 5 iis reverse-proxy dotnet-httpclient kestrel-http-server asp.net-core-2.0
我在一个IIS反向代理后面的Kestrel中运行了一个简单的asp.net core 2.0 WebApi应用程序.单个路由非常简单,它只是发出一个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();
}
Run Code Online (Sandbox Code Playgroud)
但是,此请求始终需要2-3秒才能完成.然而,如果我在没有IIS的情况下直接运行Kestrel,相同的代码需要大约100ms.
我按照所有Microsoft 文档来配置使用IIS的kestrel.
TL; DR需要配置HttpClient以不使用默认代理设置
HttpClientHandler clientHandler = new HttpClientHandler();
clientHandler.UseProxy = false;
using (HttpClient client = new HttpClient(clientHandler))
{ ... }
Run Code Online (Sandbox Code Playgroud)
长期解释是asp.net尝试为每个请求使用机器的默认代理配置设置.我的IIS配置为在具有有限访问权限的网络服务帐户下运行,因此,最终将失败(可能是因为它无法访问注册表)以查找代理设置并直接连接.这个过程显然需要大约2.5秒.
对于我的茶隼测试,我从命令行运行dotnet.\ api.dll,它使用我登录的凭据,并且可以成功访问代理设置.但是,在使用IIS时,它会在IIS运行的同一网络服务帐户下生成dotnet进程.
| 归档时间: |
|
| 查看次数: |
618 次 |
| 最近记录: |