第一次通话需要10-15秒,所有连续通话都需要不到一秒钟。 stackoverflow上有多个类似的问题,但没有一个答案缩短了时间。
作为asp webMethod的一部分,我正在使用HttpClient调用外部API(facebook)。我已经确保HttpClient在应用程序启动时只设置和初始化一次,而不是为我的webMethod的每个请求创建一个新对象。我已经确保禁用代理使用(在对象级别和作为我的web.config的一部分)。第一次调用时挂起10秒的特定行是GetAsync。我调用多个端点,一旦第一个端点通过,它们都非常快,所以我怀疑这与任何类型的缓存有关。
以下是我初始化httpClient的方法:
private readonly HttpClient _httpClient;
public FacebookClient()
{
_httpClient = new HttpClient(new HttpClientHandler
{
UseProxy = false,
Proxy = null,
});
_httpClient.BaseAddress = new Uri("https://graph.facebook.com/v2.9/");
_httpClient.Timeout = TimeSpan.FromMinutes(1);
_httpClient.DefaultRequestHeaders
.Accept
.Add(new MediaTypeWithQualityHeaderValue("application/json"));
}
这是电话:
public async Task<T> GetAsync<T>(string accessToken, string appsecret_proof, string endpoint, string args = null)
{
HttpResponseMessage response;
if (String.IsNullOrEmpty(appsecret_proof))
{
// First call hangs for 10 seconds.
response = await _httpClient.GetAsync($"{endpoint}?access_token={accessToken}&{args}").ConfigureAwait(false);
}
[...]
来自:
public async Task<TokenDebug> GetTokenDebugInfoAsync(string inputToken, string accessToken)
{
var result = await _facebookClient.GetAsync<dynamic>(
accessToken,
String.Empty,
"debug_token",
$"input_token={inputToken}&access_token={accessToken}").ConfigureAwait(false);
[...]
答案 0 :(得分:0)
不知道你解决了没有。但是我在我们公司内部也遇到了类似的问题。结果证明是我们 DNS 中的 IPv6 条目错误导致了延迟。