如何延长本地IIS Express中ASP.NET Core 2.0的请求超时
问题场景
我在本地Win10开发环境中,用VS2017搭配IIS Express调试ASP.NET Core 2.0 API时碰到了个棘手的问题:我的API实际需要3分50秒才能完成业务处理,但IIS Express默认的2分钟响应超时提前触发,直接返回502.3 - Bad Gateway错误,完全等不到API处理结束。
尝试过的无效方案
网上大多数教程都提到修改项目里的web.config文件,通过添加requestTimeout配置来延长超时时间,示例代码如下:
<?xml version="1.0" encoding="utf-8"?> <configuration> <system.webServer> <handlers> <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" /> </handlers> <aspNetCore requestTimeout="00:20:00" processPath="dotnet" arguments=".\MyAPI.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" /> </system.webServer> </configuration>
但实际调试时发现,本地IIS Express运行ASP.NET Core 2.0 API并不读取项目中的web.config,而是依赖launchSettings.json文件,可我翻遍这个文件也找不到相关的超时设置项。我还尝试把上述web.config放到项目的wwwroot文件夹里,依然没有效果(不过这个方案在Azure部署的场景下是有效的)。
2018年5月27日更新:有效解决方案
后来发现,搭配ASP.NET Core 2.0的IIS Express,实际使用的是一个类似web.config的applicationhost.config文件,它的路径在项目根目录下的.vs/config文件夹中。
打开这个文件,找到对应你的API项目的<location>节点,在节点内的<aspNetCore>标签中设置requestTimeout值即可。比如我把超时时间设为20分钟,修改后的配置片段如下:
<location path="MyAPI"> <system.webServer> <handlers> <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" /> </handlers> <httpCompression> <dynamicCompression> <add mimeType="text/event-stream" enabled="false" /> </dynamicCompression> </httpCompression> <aspNetCore requestTimeout="00:20:00" processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" forwardWindowsAuthToken="false" stdoutLogEnabled="false" /> </system.webServer> </location>
修改保存后,我的开发系统成功突破了默认的2分钟超时限制,能够正常等待API完成处理后返回响应。
内容的提问来源于stack exchange,提问作者whiskytangofoxtrot

