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

开发与生产环境均出现Client has disconnected错误求助

解决Angular + .NET Core 6.0应用"Client has disconnected"错误的思路

我们的应用采用Angular前端、.NET Core 6.0后端,在开发、生产及调试环境均出现Client has disconnected错误,排查多日无果,调整服务器配置无效,报错堆栈信息如下:

Microsoft.AspNetCore.Connections.ConnectionResetException
HResult=0x80131620
Message=The client has disconnected
Source=Microsoft.AspNetCore.Server.IIS
StackTrace:
at Microsoft.AspNetCore.Server.IIS.Core.IO.AsyncIOOperation.GetResult(Int16 token)
at Microsoft.AspNetCore.Server.IIS.Core.IISHttpContext.<ReadBody>d__385.MoveNext()
at System.IO.Pipelines.Pipe.GetReadResult(ReadResult& result)
at System.IO.Pipelines.Pipe.ReadAsync(CancellationToken token)
at System.IO.Pipelines.Pipe.DefaultPipeReader.ReadAsync(CancellationToken cancellationToken)
at Microsoft.AspNetCore.Server.IIS.Core.IISHttpContext.<ReadAsync>d__381.MoveNext()
at System.Runtime.CompilerServices.ValueTaskAwaiter1.GetResult()
at Microsoft.AspNetCore.Server.IIS.Core.HttpRequestStream.<ReadAsyncInternal>d__10.MoveNext()
at System.Runtime.CompilerServices.ValueTaskAwaiter1.GetResult()
at Microsoft.AspNetCore.WebUtilities.FileBufferingReadStream.<ReadAsync>d__40.MoveNext()
at System.Runtime.CompilerServices.ValueTaskAwaiter`1.GetResult()
at Microsoft.AspNetCore.WebUtilities.StreamHelperExtensions.<DrainAsync>d__3.MoveNext()
at Microsoft.AspNetCore.Mvc.Formatters.NewtonsoftJsonInputFormatter.<ReadRequestBodyAsync>d__12.MoveNext()
at Microsoft.AspNetCore.Mvc.ModelBinding.Binders.BodyModelBinder.<BindModelAsync>d__11.MoveNext()
at Microsoft.AspNetCore.Mvc.ModelBinding.ParameterBinder.<BindModelAsync>d__8.MoveNext()
at Microsoft.AspNetCore.Mvc.Controllers.ControllerBinderDelegateProvider.<>c__DisplayClass0_0.<<CreateBinderDelegate>g__Bind|0>d.MoveNext()
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<<InvokeInnerFilterAsync>g__Awaited|13_0>d.MoveNext()
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<<InvokeFilterPipelineAsync>g__Awaited|20_0>d.MoveNext()
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<<InvokeAsync>g__Logged|17_1>d.MoveNext()
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<<InvokeAsync>g__Logged|17_1>d.MoveNext()
at Microsoft.AspNetCore.Routing.EndpointMiddleware.<<Invoke>g__AwaitRequestTask|6_0>d.MoveNext()
at Microsoft.AspNetCore.Authorization.Policy.AuthorizationMiddlewareResultHandler.<HandleAsync>d__0.MoveNext()
at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.<Invoke>d__6.MoveNext()
at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.<Invoke>d__6.MoveNext()
at Camms.Risk.Webapi.Middlewares.ExceptionMiddleware.<InvokeAsync>d__4.MoveNext() in C:\Projects\Git\Camms.Risk\Camms.Risk\Camms.Risk.Webapi\Middlewares\ExceptionMiddleware.cs:line 34

Inner Exception 1:
COMException: An operation was attempted on a nonexistent network connection. (0x800704CD)

排查解决思路

  • 前端请求生命周期检查

    • 确认Angular端是否存在请求发送后主动中断的情况:比如路由跳转、组件销毁时未取消HTTP请求,导致后端还在处理时前端断开连接。用RxJS的takeUntil操作符绑定组件生命周期,确保组件销毁时自动取消未完成的请求。
    • 检查大文件传输场景:如果有上传/大请求体操作,前端可能因超时或网络波动主动断开。调整Angular的HTTP请求超时配置,后端同步修改Program.cs中Kestrel的最大请求体限制和超时时间:
      builder.WebHost.ConfigureKestrel(options =>
      {
          options.Limits.MaxRequestBodySize = 104857600; // 100MB
          options.Limits.KeepAliveTimeout = TimeSpan.FromMinutes(5);
      });
      
  • 后端异常处理与配置优化

    • 检查自定义异常中间件:从堆栈看错误触发在ExceptionMiddleware第34行,在中间件中捕获ConnectionResetException,判断为客户端主动断开后直接终止处理,避免错误日志泛滥:
      public async Task InvokeAsync(HttpContext context)
      {
          try
          {
              await _next(context);
          }
          catch (ConnectionResetException)
          {
              // 客户端已断开,无需处理,直接返回
              context.Response.StatusCode = StatusCodes.Status499ClientClosedRequest;
          }
          catch (Exception ex)
          {
              // 其他异常处理逻辑
          }
      }
      
    • 调整IIS应用程序池配置:延长Idle Time-out时间,增大Ping Maximum Response Time,避免应用池提前回收导致连接断开。
  • 网络层排查

    • 检查防火墙/代理服务器:确认是否存在防火墙、反向代理(如Nginx、IIS ARR)在请求未完成时主动断开连接,调整代理的超时时间和连接保持设置。
    • 查看系统日志:Windows服务器查看事件查看器的系统日志,排查是否有TCP连接异常断开的系统级错误;开发环境用Wireshark抓包,分析网络连接状态。
  • .NET Core版本与配置调整

    • 禁用不必要的请求体缓冲:如果业务不需要缓冲请求体,在控制器方法添加[DisableRequestSizeLimit]特性,或全局配置:
      builder.Services.Configure<FormOptions>(options =>
      {
          options.BufferBody = false;
      });
      
    • 升级.NET Core补丁:当前使用的.NET Core 6.0如果是旧版本,升级到最新的补丁版本,修复官方已知的连接处理Bug。

内容的提问来源于stack exchange,提问作者Hashan S.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 01:39:55