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

Azure Web App中.NET Core 3.1 MVC请求间歇性失败求助

解决Azure Web App中0x800704CD网络连接异常问题

问题概述

在Azure Web App部署的.NET Core 3.1 MVC应用中,处理约1MB大小的请求时出现间歇性失败:前两次请求报错,第三次成功;本地运行无此问题。报错核心信息:

The client has disconnected <--- An operation was attempted on a nonexistent network connection. (0x800704CD)

完整异常栈:

[Error] Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware: An unhandled exception has occurred while executing the request.Microsoft.AspNetCore.Connections.ConnectionResetException: The client has disconnected---> System.Runtime.InteropServices.COMException (0x800704CD): An operation was attempted on a nonexistent network connection. (0x800704CD)---> End of inner exception stack trace ---at Microsoft.AspNetCore.Server.IIS.Core.IO.AsyncIOOperation.GetResult(Int16 token)at Microsoft.AspNetCore.Server.IIS.Core.IISHttpContext.ReadBody()at System.IO.Pipelines.PipeCompletion.ThrowLatchedException()at System.IO.Pipelines.Pipe.GetReadResult(ReadResult& result)at System.IO.Pipelines.Pipe.GetReadAsyncResult()at Microsoft.AspNetCore.Server.IIS.Core.IISHttpContext.ReadAsync(Memory`1 memory, CancellationToken cancellationToken)at Microsoft.AspNetCore.Server.IIS.Core.HttpRequestStream.ReadAsyncInternal(Memory`1 buffer, CancellationToken cancellationToken)at System.IO.Pipelines.StreamPipeReader.ReadAsync(CancellationToken cancellationToken)at Microsoft.AspNetCore.WebUtilities.FormPipeReader.ReadFormAsync(CancellationToken cancellationToken)at Microsoft.AspNetCore.Http.Features.FormFeature.InnerReadFormAsync(CancellationToken cancellationToken)
at Microsoft.AspNetCore.Mvc.ModelBinding.FormValueProviderFactory.AddValueProviderAsync(ValueProviderFactoryContext context)at Microsoft.AspNetCore.Mvc.ModelBinding.CompositeValueProvider.CreateAsync(ActionContext actionContext, IList`1 factories)at Microsoft.AspNetCore.Mvc.ModelBinding.CompositeValueProvider.TryCreateAsync(ActionContext actionContext, IList`1 factories)at Microsoft.AspNetCore.Mvc.Controllers.ControllerBinderDelegateProvider.<>c__DisplayClass0_0.<g__Bind|0>d.MoveNext()--- End of stack trace from previous location where exception was thrown ---at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g__Awaited|13_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|24_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed context)at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|19_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Logged|17_1(ResourceInvoker invoker)at Microsoft.AspNetCore.Routing.EndpointMiddleware.g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)

环境信息

  • .NET框架:.NET Core 3.1
  • 应用类型:MVC Core App
  • Azure Web App配置:.NET 6 LTS
  • 其他配置:64位、集成管道、HTTP 1.1、WebSocket关闭、TLS 1.2

已尝试操作

  • 设置SCM_COMMAND_IDLE_TIMEOUT=600
  • 监控显示内存、CPU无峰值,处于正常范围

解决方案

1. 调整Azure Web App请求超时与缓冲区配置

在Azure门户的Web App配置中,添加以下应用设置:

  • ASP.NET_CORE_REQUEST_TIMEOUT: 设置为00:10:00(可根据实际处理耗时调整,10分钟足够覆盖1MB请求的处理)
  • WEBSITE_MAX_REQUEST_BUFFER: 设置为10485760(10MB,扩大默认缓冲区限制,适配1MB请求的传输需求)

2. 修正.NET版本不匹配问题

当前应用基于.NET Core 3.1开发,但Azure Web App配置为.NET 6 LTS,版本不一致可能引发IIS托管层的兼容性问题:

  • 方案一:将Azure Web App的.NET运行时版本切换为.NET Core 3.1
  • 方案二:升级应用代码至.NET 6 LTS,适配Azure配置的运行时环境

3. 启用HTTP/2优化连接稳定性

当前使用HTTP 1.1,切换到HTTP/2可提升连接可靠性:

  • 在Azure Web App配置中,将HTTP version改为2.0

4. 添加异常捕获与重试逻辑

在MVC控制器中针对表单读取或模型绑定环节捕获连接重置异常,添加自动重试逻辑:

[HttpPost]
public async Task<IActionResult> YourAction()
{
    int retryCount = 2;
    while(retryCount >= 0)
    {
        try
        {
            var form = await Request.ReadFormAsync();
            // 业务逻辑处理
            return Ok();
        }
        catch(ConnectionResetException)
        {
            retryCount--;
            if(retryCount < 0)
                throw;
            await Task.Delay(100);
        }
    }
    return BadRequest();
}

5. 检查Web App实例状态与资源配置

  • 若为多实例部署,检查实例健康状态,尝试重启Web App实例
  • 确认App Service Plan的资源配额充足,避免因资源节流导致连接中断

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 14:54:53