gpt4 book ai didi

c# - System.Net.HttpClient : SendAsync failed with OperationCanceledException without http request throught network

转载 作者:行者123 更新时间:2023-12-03 16:14:05 27 4
gpt4 key购买 nike

我们使用 System.Net.Http.HttpClient用于 k8s 内部微服务之间的调用。

  • 操作系统 Linux(在 docker 内)
  • dotnet 目标框架:netcoreapp2.1
  • 服务器:红隼
  • 协议(protocol):http

  • 几天前,我们注意到 http 调用的非常奇怪的行为:
    微服务之间的一些调用(接近 2-3%)因错误而失败
    System.OperationCanceledException: The operation was canceled.
    at System.Net.Http.HttpClient.HandleFinishSendAsyncError(Exception e, CancellationTokenSource cts)
    at System.Net.Http.HttpClient.FinishSendAsyncBuffered(Task`1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts)
    at OurCode.HttpServiceClient.GetStringResponseAsync(String methodUri, HttpMethod httpMethod)
    ...another our code...

    在我们的 http 调用超时(它是 3 秒)之后。但是被调用者服务中没有关于调用的日志。

    我们启用了 packetbeat 来跟踪 http 请求,并且还注意到,没有任何从调用者服务到被调用者服务的 http 请求被执行。
    该服务的 CPU、内存和网络一直正常。

    我们的 http 调用代码的简化版本如下所示:
    public async Task<string> GetStringResponseAsync(String methodUri,  HttpMethod httpMethod)
    {
    int timeoutInMilliseconds = 3000;
    var tokenSource = new CancellationTokenSource();
    var rm = new HttpRequestMessage(httpMethod, methodUri);
    Task<HttpResponseMessage> httpTask = HttpClient.SendAsync(rm, tokenSource.Token);
    tokenSource.CancelAfter(timeoutInMilliseconds);
    HttpResponseMessage response = await httpTask;
    await EnsureSuccessStatusCode(response);
    return await response.Content.ReadAsStringAsync();
    }

    如果没有通过网络发出 http 请求,关于什么问题会导致这种奇怪行为的任何想法,我该怎么做才能进一步调查?

    最佳答案

    这只是意味着 Web 服务没有响应。
    HttpClient抛出 TaskCanceledException , (继承自 OperationCanceledException )当超时过去时。它不直观,对我(和其他人)没有任何意义,但不幸的是它就是这样做的。

    有一些关于它的讨论here (如果您关心的话,一些人提到了一些解决方法来区分超时和真正的取消)。

    关于c# - System.Net.HttpClient : SendAsync failed with OperationCanceledException without http request throught network,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53711104/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com