网络课程教学平台有哪些,排名优化公司哪家效果好,帮公司做网站运营,wordpress安装主题后进不去后台众所周知#xff0c;当我们使用IIS的时候#xff0c;在使用负载均衡的情况下#xff0c;想停掉一个站点#xff0c;通常会点击Sites#xff08;网站#xff09;中的Stop#xff08;停止#xff09;来停止一个站点。但是这样做#xff0c;会带来一个问题#xff0c;当…众所周知当我们使用IIS的时候在使用负载均衡的情况下想停掉一个站点通常会点击Sites网站中的Stop停止来停止一个站点。但是这样做会带来一个问题当点击Stop停止时正在响应中的请求会立刻被切断使客户端无法收到响应后续也无法连接该站点在某些业务场景中比如涉及金额交易业务在没有使用幂等锁等手段的情况下强行切断的请求后客户端不知道该交易的交易情况如果再次请求因为本站点已停止负载均衡会指向其他机器会造成重复交易如果不请求客户端也不能确切的知道该交易已经成功。类似微服务中服务间请求超时的情况。熟悉IIS的读者通常不会直接停止站点而会选择点击Application Pools应用程序池中的Stop停止来停止一个站点应用程序池在被停止后新的请求会被响应503负载均衡识别到503后会把该请求负载到其他机器上以保证业务不会中断。同样的问题当点击Stop停止停止时正在响应的请求会发生什么情况呢。有经验的开发/运维会回答在Application Pools应用程序池里Advanced Settings高级设置中Process Model进程模型组包含一个Shutdown Time Limit关闭时间限制选项默认值为90s。这就意味着当应用程序池停止、回收时IIS会最多等待没响应的请求90s如果90s内所有的请求响应完毕应用程序池就会被停止、回收。那么如何判断IIS在这90s内未响应请求是否全部被响应呢如果部署的程序是ASP.NET Core可以在Event Viewer事件查看器/Windows LogsWindows 日志/Application应用程序里查看事件日志如果出现Failed to gracefully shutdown application MACHINE/WEBROOT/APPHOST/xxx.这个警告则表明存在请求没有被响应被IIS强行关闭的情况。事与愿违在实际生产实践中读者会发现IIS并没有等待90s就会关掉连接而客户端还在傻傻等待90s后才会显示无响应造成正在请求的HTTP无法响应。通过阅读[官方文档](https://learn.microsoft.com/en-us/aspnet/core/fundamentals/host/generic-host?viewaspnetcore-8.0#ihostapplicationlifetime .NET Generic Host in ASP.NET Core)我们得知等ASP.NET Core收到关闭信号时对于正在处理的HTTP请求会等待5s5s之后会像IIS那样关闭连接。所以我们需要设置HostOptionsvar builder WebApplication.CreateBuilder(args);......builder.Services.ConfigureHostOptions(options
{//If the timeout period expires before all of the hosted services stop, any remaining active services are stopped when the app shuts down. The services stop even if they havent finished processing. If services require more time to stop, increase the timeout.//Default: 5 secondsoptions.ShutdownTimeout TimeSpan.FromSeconds(30);
});......按照文档修改程序后实际测试发现设置.NET Generic Host的ShutdownTimeout似乎不生效, 在改动前由于IIS的Shutdown Time Limit默认是90s ,ASP.NET Core中ShutdownTimeout默认值是5s,所以在改动前IIS站点会最多等待正在请求的HTTP 5s 在改动后笔者把.NET Generic Host的ShutdownTimeout调整至30s后实测下来发现点击停止应用程序池后竟然只能等正在请求中的HTTP 10s! 于是再次搜索资料终于发现还有一个参数需要设置- https://stackoverflow.com/questions/51634638/graceful-shutdown-of-ihostedservice 和官方文档[地址](https://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/aspnet-core-module?viewaspnetcore-3.1#attributes-of-the-aspnetcore-element ASP.NET Core Module (ANCM) for IIS) 在最近的文档(.NET 8)里竟然把Attributes of the aspNetCore element这一节删掉移走了导致查阅最新文档根部搜索不到所需信息接下来按照文档操作就十分简单了加上shutdownTimeLimit属性修改web.config如下:?xml version1.0 encodingutf-8?
configurationlocation path. inheritInChildApplicationsfalsesystem.webServerhandlersadd nameaspNetCore path* verb* modulesAspNetCoreModuleV2resourceTypeUnspecified //handlersaspNetCore shutdownTimeLimit30 processPathdotnet arguments.\WebApplicationTest.dll stdoutLogEnabledtruestdoutLogFile.\logs\stdout hostingModelinprocess //system.webServer/location
/configuration修改后再次实测即符合预期在使用ASP.NET Core的情况下关于shutdownTime总结省流如下IIS应用程序池shutdownTime默认值为90s
AspNetCoreModuleV2shutdownTime默认值为10s
.NET Generic Host(应用程序)默认值为5s
如要修改shutdownTime则需同时关注以上三处设置。祝您使用愉快
声明
本文采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可发表在CSDN和博客园欢迎读者转载但未经作者同意必须保留此段声明且在文章页面明显位置给出原文连接请读者/爬虫们尊重版权