📖 ~1 min read
Table of contents
Symptom & Impact
Web applications return HTTP 503 and app pools stop because IIS rapid-fail protection disables repeated crashing worker processes. Business APIs and web portals become unavailable.
Environment & Reproduction
Usually appears immediately after .NET runtime or hosting bundle updates where site binaries target mismatched runtime versions.
Get-Service W3SVC,WAS
Import-Module WebAdministration
Get-ChildItem IIS:/AppPools | Select Name,State,managedRuntimeVersion
Get-WinEvent -LogName Application -MaxEvents 60 | Where-Object {$_.Message -match 'w3wp|IIS-W3SVC-WP|.NET'}
Root Cause Analysis
Crash loops are typically caused by incompatible runtime bindings, missing native dependencies, bad web.config transforms, or startup exceptions in application code.
Quick Triage
Confirm pool disabled state and immediate crash reason from event traces.
Get-WebAppPoolState -Name ''
%windir%/system32/inetsrv/appcmd list apppool '' /text:*
iisreset /status
Step-by-Step Diagnosis
Inspect event IDs, failed request traces, and runtime inventory to align app target framework with installed runtime.
dotnet --info
Get-ChildItem 'C:/Program Files/dotnet/shared' -Recurse
Get-WinEvent -LogName 'Microsoft-Windows-IIS-Logging/Logs' -MaxEvents 30 -ErrorAction SilentlyContinue

Solution — Primary Fix
Install/repair the expected .NET hosting bundle, recycle app pool, and re-enable pool after configuration validation.
Still having issues? Our IT Solutions & Services team can diagnose and resolve this for you. Get in touch for a free consultation.
iisreset /stop
Restart-Service WAS -Force
Restart-Service W3SVC -Force
%windir%/system32/inetsrv/appcmd set apppool '' /failure.rapidFailProtection:false
%windir%/system32/inetsrv/appcmd recycle apppool /apppool.name:''

Solution — Alternative Approaches
If runtime mismatch persists, temporarily switch to no-managed-code mode for reverse-proxy frontends or pin a prior known-good runtime.
%windir%/system32/inetsrv/appcmd set apppool '' /managedRuntimeVersion:''
%windir%/system32/inetsrv/appcmd set config '' -section:system.webServer/aspNetCore /hostingModel:OutOfProcess /commit:apphost
Verification & Acceptance Criteria
App pool remains started for normal load, no fresh worker-process crash events, and application health checks return expected status.
Get-WebAppPoolState -Name ''
Invoke-WebRequest -Uri 'http://localhost/health' -UseBasicParsing
Get-WinEvent -LogName Application -MaxEvents 30 | Where-Object {$_.Message -match 'w3wp' -and $_.LevelDisplayName -eq 'Error'}
Rollback Plan
Revert to prior app binaries/runtime package and restore last known-good IIS configuration backup if startup failures continue.
%windir%/system32/inetsrv/appcmd add backup PreDotNetUpdate
%windir%/system32/inetsrv/appcmd restore backup PreDotNetUpdate
iisreset
Prevention & Hardening
Pin runtime versions in deployment pipelines, test app pools in staging after patching, and alert on app pool state transitions.
Get-WindowsFeature Web-Server,Web-Asp-Net45
Get-Item 'HKLM:/SOFTWARE/Microsoft/ASP.NET' -ErrorAction SilentlyContinue
Register-ScheduledTask -TaskName 'IISPoolHealth' -Action (New-ScheduledTaskAction -Execute 'powershell.exe' -Argument '-Command "Get-ChildItem IIS:/AppPools"') -Trigger (New-ScheduledTaskTrigger -Once -At 01:00 -RepetitionInterval (New-TimeSpan -Minutes 15))
Related Errors & Cross-Refs
Commonly linked with HTTP Error 503.0, ANCM startup failures, and CLR version mismatch events after framework updates.
View all Windows Server 2022 tutorials on the Tutorials Hub →
Browse all common problems & solutions on the Tutorials Hub.
References & Further Reading
Microsoft IIS rapid-fail protection documentation, ASP.NET hosting bundle deployment guidance, and IIS troubleshooting references for Windows Server 2022.
Need Expert Help?
If you cannot resolve this yourself, our team offers hands-on Server Management, Managed IT Services, and flexible Support Plans. Contact us today — we respond within one business day.