Webapi发布后IIS超时(.net8.0)

发布于:2025-08-16 ⋅ 阅读:(13) ⋅ 点赞:(0)

前言

最近实现服务器数据导出:
.net8.0的webapi 获取到post请求,查询数据后dbReader导出到workbook. 并保存Excel到远程的文件服务器。
问题:本地调试无问题,发布到远程服务器后数据量一大,前端就会Response 502

一、报错信息

System.Net.WebException
HResult=0x80131509
Message=远程服务器返回错误: (502) 错误的网关。

二、日志分析

在 while (reader.Read())中记录 输出日志:

08-15 16:05 api  请求   运行008-15 16:05 _SG1  请求   运行008-15 16:05 sqlHelper   do workbook占存为:77.20 MB  运行008-15 16:05 测试开始  运行508-15 16:05 测试开始1  运行508-15 16:05 测试开始2  运行508-15 16:05 测试开始_1万行占存为:477.07 MB  运行708-15 16:05 测试开始_10万行占存为:197.26 MB  运行1808-15 16:05 测试开始_20万行占存为:181.61 MB  运行3408-15 16:05 测试开始_30万行占存为:182.88 MB  运行4908-15 16:06 测试开始_40万行占存为:182.12 MB  运行6908-15 16:06 测试开始_50万行占存为:178.66 MB  运行8208-15 16:06 测试开始_60万行占存为:182.79 MB  运行9708-15 16:06 测试开始_70万行占存为:178.45 MB  运行116

情况:在120秒左右,前端返回502,后端并未中断。

三、分析

问题是post请求,在后端还在执行的时候,中途释放掉了。情况只有两种:
1、Request超时 2、内存溢出。

然后使用了很多办法:

1、request:
  request.Timeout = 600000;
2、 webapi:
 [HttpPost]
 [RequestTimeout(1000000)]//1000S
 public async Task<IActionResult> GetSG1(SG1Req obj)
3、IIS各种设置

都没什么效果

四、最终解决办法:

修改web.config添加requestTimeout=“00:20:00” 到 aspNetCore
(requestTimeout="60000"会报错 )

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath=".\WebApi.exe" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="outofprocess" 
      requestTimeout="00:20:00"  />
      
 </system.webServer>
  </location>

</configuration>

问题得到解决,记录下来。


网站公告

今日签到

点亮在社区的每一天
去签到