在 asp .net core 3 中使用进程内托管设置请求超时
Posted
技术标签:
【中文标题】在 asp .net core 3 中使用进程内托管设置请求超时【英文标题】:Set the request timeout with In-process hosting in asp .net core 3 【发布时间】:2020-02-18 19:22:39 【问题描述】:我有一个 asp .net 核心网站,在 web.config 中有以下内容
<aspNetCore processPath="%LAUNCHER_PATH%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" arguments="%LAUNCHER_ARGS%" requestTimeout="00:20:00">
但它会因错误而超时
HTTP Error 500.37 - ANCM Failed to Start Within Startup Time Limit
我可以从https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/aspnet-core-module?view=aspnetcore-3.0 看到 requestTimeout 属性不适用于进程内托管。有没有增加超时时间的替代方法?
另一种前进的方法是重新调整应用程序,以便在第一次点击时加载不需要很长时间,但现在我正在努力避免这种情况。
【问题讨论】:
requestTimeout
属性不适用于进程内托管。对于进程内托管,模块等待应用处理请求。关于此错误,您可以参考:docs.microsoft.com/en-us/aspnet/core/test/…
谢谢,那个链接说By default, the timeout is 120 seconds.
有什么办法可以增加吗?
我还需要增加进程内托管的默认超时值。
见startupTimeLimit
docs.microsoft.com/en-us/aspnet/core/host-and-deploy/…
【参考方案1】:
我也遇到过同样的问题,在花了一段时间寻找根本原因和可能的解决方案后,我了解到当同一台机器上有许多应用程序池时会发生这种情况,这就是我的情况.
Microsoft 建议错开多个应用的启动过程。另一种解决方案是增加启动限制。
我看到有人在谈论将hostProcess从Inbound改为Outbound,这可能有效,但不会使用IS HTTP Server,但是Kestrel Web 服务器用于处理请求。
我认为最好的解决方案是错开启动过程或者增加启动限制。
在这里您可以找到更多信息: https://docs.microsoft.com/en-us/aspnet/core/test/troubleshoot-azure-iis?view=aspnetcore-3.0
https://tutorialshelper.com/what-is-the-difference-between-inprocess-and-outofprocess-service-in-asp-net-core/
【讨论】:
【参考方案2】:我在 IIS 托管的 .NET Core 3.1 Web API 应用程序中看到了同样的错误。
对我来说始终有效的一个建议是回收应用程序的 IIS 应用程序池。
如果您在 IIS 的生产环境中托管应用程序,我建议您定期安排应用程序池的回收,因为这可以释放 w3wp.exe 工作进程使用的内存。
如果上述解决方法不能解决问题,另一个建议是在启动时调试应用程序 ConfigureServices() 和 Configure() 方法,看看还有什么可能会延迟启动。
【讨论】:
以上是关于在 asp .net core 3 中使用进程内托管设置请求超时的主要内容,如果未能解决你的问题,请参考以下文章
HTTP 错误 500.0 - Dot net core 3.1 中的 ASP.NET Core IIS 托管失败(进程中)
ASP.NET Core 3.1 - HTTP 错误 500.30 - ANCM 进程内启动失败
进程内和进程外托管的 ASP .NET Core 3 + Identity Server 问题
ASP.NET Core MVC 入门到精通 - 3. 使用MediatR