Exchange ServerTroubleshooting

OWA and ECP HTTP 500 errors on Exchange Server: usual causes and how to tell them apart

HTTP 500 or Server Error in '/ecp' on Exchange? Use the error text, IIS and HttpProxy logs to find the cause: a non-elevated update, a missing config file, certificates or app pools.

An HTTP 500 from Outlook on the web or the Exchange admin center tells you that something failed, not what. The same status code comes from half-installed updates, missing configuration files, expired certificates and crashing application pools. In this post I'll show how to find which side of the proxy failed, match what you see to the usual causes, and apply the fix that belongs to it.

Errors this guide fixes

  • Something went wrong Your request couldn't be completed. HTTP Status code: 500OWA
  • Server Error in '/ecp' Application.ECP / EAC
  • Could not load file or assembly 'Microsoft.Exchange.Common, Version=15.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'OWA / ECP
  • something went wrong Sorry, we can't get that information right now. Please try again later.OWA / ECP
  • Event ID 1003: NullReferenceException at Microsoft.Exchange.HttpProxy.FbaModule.ParseCadataCookiesApplication log
  • Event ID 1309 (ASP.NET)Application log
  • 500.19Browser / IIS log (OWA, ECP)
  • Event ID 15021 (HttpEvent)System log+1 more guide
How this guide is organised: Symptoms → Why it happens → How to fix it → Verify the fix → Key takeawaysFlow diagram of the article's sections in reading order: 1. Symptoms. 2. Why it happens. 3. How to fix it (6 steps: Find out which side failed; Match what you see to the cause; Repair a non-elevated security update; Regenerate a missing SharedWebConfig.config; Check the Auth certificate and the back-end binding; Application pools and config files). 4. Verify the fix. 5. Key takeaways. Toolbox: Event ID 1003, Event ID 1309, Test-Path, Get-HealthReport, SharedWebConfig.config.1Symptoms2Why it happens3How to fix it4Verify the fix5Key takeaways1Find out whichside failed2Match whatyou see to th…3Repair anon-elevated…4Regenerate amissing Shar…5Check theAuth certifica…6Applicationpools and con…TOOLBOXEvent ID 1003Event ID 1309Test-PathGet-HealthReportSharedWebConfig.configHow this guide is organised: Symptoms → Why it happens → How to fix it → Verify the fix → Key takeawaysFlow diagram of the article's sections in reading order: 1. Symptoms. 2. Why it happens. 3. How to fix it (6 steps: Find out which side failed; Match what you see to the cause; Repair a non-elevated security update; Regenerate a missing SharedWebConfig.config; Check the Auth certificate and the back-end binding; Application pools and config files). 4. Verify the fix. 5. Key takeaways. Toolbox: Event ID 1003, Event ID 1309, Test-Path, Get-HealthReport, SharedWebConfig.config.1Symptoms2Why it happens3How to fix it1Find out which side failed2Match what you see to the cause3Repair a non-elevated security update4Regenerate a missing SharedWebConfig.config5Check the Auth certificate and the back-endbinding6Application pools and config files4Verify the fix5Key takeawaysTOOLBOXEvent ID 1003Event ID 1309Test-PathGet-HealthReportSharedWebConfig.config
At a glance: how this guide is organised · 6 fix steps · 5 key tools

Symptoms#

OWA shows its error page, and ECP shows an ASP.NET error, typically:

Text
Something went wrong
Your request couldn't be completed. HTTP Status code: 500

Server Error in '/ecp' Application.
Could not load file or assembly 'Microsoft.Exchange.Common, Version=15.0.0.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.

Related variants you may see instead:

  • After an interrupted installation: something went wrong with Sorry, we can't get that information right now. Please try again later. If the problem continues, contact your helpdesk.
  • Sign-in never completes or the browser reports a redirect limit, and the Application log has Event ID 1003 from the front-end HTTP proxy with System.NullReferenceException at Microsoft.Exchange.HttpProxy.FbaModule.ParseCadataCookies.
  • ASP.NET Event ID 1309 warnings ("An unhandled exception has occurred") for /owa or /ecp.

Why it happens#

Every OWA or ECP request crosses two IIS sites. The Default Web Site (front end) authenticates the user, and its HttpProxy module forwards the request to the Exchange Back End site on port 444 of the server where the mailbox is active, which runs the real application. Either side can return a 500. The usual reasons:

  • A security update installed without elevation. Double-clicking the .msp on a server with UAC enabled can leave files and configuration inconsistent, so OWA and ECP can't load Exchange assemblies.
  • A missing SharedWebConfig.config in ClientAccess (back end) or FrontEnd\HttpProxy (front end), typically after setup was interrupted.
  • Certificates. An expired Auth (OAuth) certificate breaks forms-based sign-in on the front end; a missing certificate on the back-end 444 binding stops proxying.
  • Application pools and config files. A crashing pool, or a web.config IIS can't parse (status 500.19).

How to fix it#

1. Find out which side failed#

Reproduce the error and note the time. OWA's error page details show X-FEServer and X-BEServer, the servers that handled the request. On those servers, search the IIS logs: W3SVC1 is the Default Web Site, W3SVC2 the Exchange Back End.

PowerShell
$log = "u_ex$((Get-Date).ToUniversalTime().ToString('yyMMdd')).log"
foreach ($site in 'W3SVC1','W3SVC2') {
  Select-String -Path "C:\inetpub\logs\LogFiles\$site\$log" -Pattern '/(owa|ecp)/.* 500 \d+ \d+ \d+$' |
    Select-Object -Last 5 | ForEach-Object { "$site  $($_.Line)" }
}
  • 500 only in W3SVC1: the front end failed or couldn't reach the back end (Auth certificate, the HttpProxy SharedWebConfig.config, the 444 binding).
  • 500 in W3SVC2: the application on the back end failed (non-elevated update, the ClientAccess SharedWebConfig.config, app pool).
  • Sub-status 19: a configuration file problem.

The HttpProxy logs in %ExchangeInstallPath%Logging\HttpProxy\Owa and \Ecp add HttpStatus, BackEndStatus, TargetServer, ErrorCode and GenericErrors. A front-end 500 with an empty BackEndStatus means the back end never answered, so check the 444 binding on the target server. Events 1309 and 1003 carry the exception text, which is often the quickest route to the cause.

2. Match what you see to the cause#

What you seeLikely causeGo to
Could not load file or assembly 'Microsoft.Exchange.Common...' right after an SUUpdate installed without elevationStep 3
Sorry, we can't get that information right now after an interrupted installMissing SharedWebConfig.configStep 4
Sign-in loop, redirect limit, Event 1003 ParseCadataCookiesExpired Auth certificateStep 5
Blank page, HttpEvent 15021 for 0.0.0.0:444Back-end bindingStep 5
HTTP 503 or sub-status 500.19Application pool or config fileStep 6

3. Repair a non-elevated security update#

Open Command Prompt with Run as administrator, run the full path of the .msp, and restart when it finishes. If OWA or ECP still fail, rebuild the virtual directory files and configuration from an elevated Exchange Management Shell, reset IIS and restart the server (Microsoft's article also covers repairing ECP's bin search paths):

PowerShell
cd (Join-Path $env:ExchangeInstallPath 'Bin')
.\UpdateCas.ps1
.\UpdateConfigFiles.ps1
iisreset

More on avoiding this in installing Exchange security updates.

4. Regenerate a missing SharedWebConfig.config#

Check both locations with Test-Path (Join-Path $env:ExchangeInstallPath 'ClientAccess\SharedWebConfig.config') and the same for FrontEnd\HttpProxy\SharedWebConfig.config. For whichever is missing, run the matching line from an elevated command prompt, then iisreset:

Command Prompt
cd /d "%ExchangeInstallPath%\bin"
DependentAssemblyGenerator.exe -exchangePath "%ExchangeInstallPath%\bin" -exchangePath "%ExchangeInstallPath%\ClientAccess" -configFile "%ExchangeInstallPath%\ClientAccess\SharedWebConfig.config"
DependentAssemblyGenerator.exe -exchangePath "%ExchangeInstallPath%\bin" -exchangePath "%ExchangeInstallPath%\FrontEnd\HttpProxy" -configFile "%ExchangeInstallPath%\FrontEnd\HttpProxy\SharedWebConfig.config"

5. Check the Auth certificate and the back-end binding#

PowerShell
$thumb = (Get-AuthConfig).CurrentCertificateThumbprint
Get-ExchangeCertificate -Thumbprint $thumb | Format-List Subject, NotAfter, Status
netsh http show sslcert ipport=0.0.0.0:444

If the Auth certificate has expired or isn't found, renew it as described in renewing the SAN and Auth certificates; the CSS-Exchange script MonitorExchangeAuthCertificate.ps1 can also do it. If the 444 binding has no valid certificate, follow fixing the Exchange Back End 444 binding.

6. Application pools and config files#

PowerShell
Import-Module WebAdministration
Get-ChildItem IIS:\AppPools | Where-Object Name -like 'MSExchange*' | Format-Table Name, State
Start-WebAppPool -Name MSExchangeOWAAppPool     # a pool that is Stopped
Restart-WebAppPool -Name MSExchangeECPAppPool   # recycle a running pool

A stopped pool usually produces HTTP 503 rather than 500. If a pool keeps stopping, IIS rapid-fail protection has disabled it after repeated crashes; the WAS events in the System log and the 1309 events explain why. For 500.19, compare the failing application's web.config with the same file on a healthy server at the same build instead of editing by hand, and confirm the IIS URL Rewrite module is installed. Remember that each CU overwrites web.config customisations.

Verify the fix#

  • OWA and ECP load for mailboxes on every server; test each one directly, for example https://ex01.contoso.com/owa.
  • New IIS log lines for /owa and /ecp show 200 or 302, not 500.
  • No new 1309 or 1003 events in the Application log.
  • Get-HealthReport -Identity EX01 | Where-Object { $_.HealthSet -like 'OWA*' -or $_.HealthSet -like 'ECP*' } | Format-Table HealthSet, AlertValue shows Healthy once the probes have run.

Key takeaways#

  • Read the error text first; it usually names the cause.
  • Work out whether the front end or back end failed before changing anything.
  • Install security updates from an elevated prompt and run the Health Checker afterwards.
  • Keep the Auth certificate and the 444 binding healthy; problems with either only show up when users try to sign in.

References#

Written and checked against current Microsoft Learn documentation. Test changes with a pilot group before rolling them out to everyone, and if an admin center path has moved since, search for the setting name instead.

Spotted a mistake, or did this fix work differently for you? Email me or message me on LinkedIn — corrections are credited in the article.

Written by

Omer Eltayeb

Intune Subject Matter Expert in Cairo, Egypt, former Microsoft Cloud Solutions Architect, Microsoft Certified Trainer and Microsoft Innovative Educator Expert (2024–26) and Microsoft Elevate Educator Expert (2026–27). I share practical, step-by-step guides, study plans, scripts and toolkits for Microsoft Intune, Configuration Manager, Microsoft Entra ID, Microsoft Defender, Exchange and Microsoft 365 with the community.

Microsoft Certified Trainer (MCT) 2026Microsoft Innovative Educator Expert 2025–2026Microsoft Elevate Educator Expert 2026–2027ISC2 Certified Information Systems Security Professional (CISSP)Microsoft 365 Certified: Enterprise Administrator Expert (MS-102)