![](/img/trans.png)
[英]Why is first HttpClient.PostAsync call extremely slow in my C# winforms app?
[英]Why is first HttpClient.GetAsync call extremely slow in my C# asp form app?
第一次调用需要 10-15 秒,所有连续调用只需要不到 1 秒。 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);
[...]
不知道你解决了没有。 但是我在我们公司内部也遇到了类似的问题。 结果证明是我们 DNS 中的一个错误的 IPv6 条目导致了延迟。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.