Webapi发布后IIS超时(.net8.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 请求 运行0秒
08-15 16:05 _SG1 请求 运行0秒
08-15 16:05 sqlHelper do workbook占存为:77.20 MB 运行0秒
08-15 16:05 测试开始 运行5秒
08-15 16:05 测试开始1 运行5秒
08-15 16:05 测试开始2 运行5秒
08-15 16:05 测试开始_1万行占存为:477.07 MB 运行7秒
08-15 16:05 测试开始_10万行占存为:197.26 MB 运行18秒
08-15 16:05 测试开始_20万行占存为:181.61 MB 运行34秒
08-15 16:05 测试开始_30万行占存为:182.88 MB 运行49秒
08-15 16:06 测试开始_40万行占存为:182.12 MB 运行69秒
08-15 16:06 测试开始_50万行占存为:178.66 MB 运行82秒
08-15 16:06 测试开始_60万行占存为:182.79 MB 运行97秒
08-15 16:06 测试开始_70万行占存为:178.45 MB 运行116秒
情况:在120秒左右,前端返回502,后端并未中断。
三、分析
问题是post请求,在后端还在执行的时候,中途释放掉了。情况只有两种:
1、Request超时 2、内存溢出。
然后使用了很多办法:
1、request:request.Timeout = 600000;
2、 webapi:[HttpPost][RequestTimeout(1000000)]//1000Spublic 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>
问题得到解决,记录下来。