【问题标题】:Why is first HttpClient.GetAsync call extremely slow in my C# asp form app?为什么我的 C# asp 表单应用程序中的第一个 HttpClient.GetAsync 调用非常慢?
【发布时间】:2017-07-18 19:06:32
【问题描述】:

第一个呼叫需要 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);
[...]

【问题讨论】:

  • 可能是某种安全软件?我对 TrendMicro 和 WCF 也有同样的问题。
  • 您的代码对我来说看起来不错。您是否使用过 Fiddler 之类的工具来查看网络堆栈中发生的情况?我同意 Christian 的观点,这听起来像是在你的应用之外。
  • 是的,它确实看起来像是外部的东西。我会尝试 fiddler 和 wireshark 看看发生了什么。
  • 您是否尝试过从普通浏览器发出调用?
  • 是的。那里没有问题。

标签: c# asp.net httpclient


【解决方案1】:

我不知道你是否解决了它。但我在我们公司内部也有类似的问题。结果确实是我们的 DNS 中的一个错误的 IPv6 条目导致了延迟。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2010-10-28
    • 1970-01-01
    相关资源
    最近更新 更多