我们正在使用System.Net.Http.HttpClient
这样的asp.net应用程序(特别是.net核心和标准.net框架4.5.1 app)应用程序之间使用Windows身份验证进行http调用:
var client = new HttpClient(new HttpClientHandler { Credentials = CredentialCache.DefaultCredentials });
var response= await _winHttpClient.GetAsync(url);
...
这很好,除了第一个请求需要10秒。然后请求快速进行大约40秒,然后一个请求需要10秒。这个循环永远持续下去。
查看接收端的IIS日志,我们可以确定每个请求都被拒绝(401)然后跟进请求通过,并且每隔一段时间之间的延迟大约是10秒。这对客户端代码都是不可见的 - 它由底层框架解决。
示例:
2017-03-17 14:19:40 10.241.108.23 GET /person/search/john - 80 - 10.211.37.246 - 401 2 5 31
2017-03-17 14:19:40 10.241.108.23 GET /person/search/john - 80 utv\frank 10.211.37.246 - 200 0 0 93
2017-03-17 14:19:41 10.241.108.23 GET /person/search/johnn - 80 - 10.211.37.246 - 401 2 5 46
2017-03-17 14:19:51 10.241.108.23 GET /person/search/johnn - 80 utv\frank 10.211.37.246 - 200 0 0 281
似乎凭据以某种方式缓存,并且必须每40秒刷新一次。
值得注意的是,当两个应用程序在本地运行时,只有当它们在实际的托管环境中运行时,才会出现此问题。
发生了什么? 消费者必须为每个请求进行两次调用吗?为什么有些请求需要10秒钟进行身份验证?
任何帮助都将不胜感激。