You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

REST请求执行超2分钟触发Request aborted异常排查

问题原因分析

这个错误的核心是请求超时:RestSharp底层依赖的HttpClient默认请求超时时间通常为100秒(约1分40秒),部分环境或版本下为2分钟,当服务端接口执行时长超过这个阈值时,客户端会主动取消请求,抛出TaskCanceledException并包装为HttpRequestException(提示Request aborted)。

另外WSL环境存在特殊情况:WSL与主机之间的网络转发可能有默认超时设置,或者Python服务所在的Web框架未配置长连接超时,导致服务端虽执行完成,但客户端已因超时断开连接。

解决配置调整

1. 调整RestSharp客户端超时时间

可以通过全局或单个请求两种方式设置更长的超时,覆盖默认值:

全局设置(针对整个RestClient)

public MyService(...)
{
    var options = new RestClientOptions(url)
    {
        // 设置超时为10分钟(单位:毫秒)
        Timeout = 600000 
    };
    _restClient = new RestSharp.RestClient(options);
}

单个请求设置(仅针对do接口)

如果只有该接口需要长超时,可单独配置:

public async Task DoAsync()
{   
    try
    {   
        var request = new RestRequest("do")
        {
            // 设置该请求超时为10分钟
            Timeout = 600000 
        };
        request.AddJsonBody(/*data*/);
        var res = await _restClient.PostAsync<int>(request).ConfigureAwait(false);

        ...
    }
    catch (Exception ex)
    {
        // log
        throw;
    }
}   

2. 调整Python服务端Web框架超时

确保服务端允许长请求执行:

  • Flask + Gunicorn:启动时设置超时参数
    # 示例:设置超时为10分钟
    gunicorn --timeout 600 app:app
    
  • Django + uWSGI:修改uWSGI配置文件
    # 设置请求超时为10分钟
    harakiri = 600
    

3. 排查WSL网络层面超时

WSL与Windows主机的网络转发可能存在默认超时,可做以下调整:

  • 临时关闭Windows防火墙测试(仅用于排查是否是防火墙拦截长连接)
  • 修改WSL的TCP心跳参数:编辑/etc/sysctl.conf,添加以下内容后执行sudo sysctl -p生效
    net.ipv4.tcp_keepalive_time = 300
    net.ipv4.tcp_keepalive_intvl = 60
    net.ipv4.tcp_keepalive_probes = 10
    
    这些参数让TCP连接定期发送心跳包,避免被中间网络设备断开。
额外建议
  • 超时时间不要设置过长,根据业务实际最长执行时长配置(比如接口最长跑5分钟,就设6分钟超时)
  • 对于超长时间任务,建议改用异步任务模式:客户端先提交任务获取任务ID,后续通过轮询或WebSocket获取结果,避免长时间占用HTTP连接

内容的提问来源于stack exchange,提问作者theateist

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 17:52:46