Problem
You’ve noticed that you are unable to access the Microsoft Exchange Admin Center (EAC) via the /ECP directory to manage Exchange:
Server Error in ‘/ecp’ Application.
Configuration Error
Description: An error occurred during the processing of a configuration file required to service this request. Please review the specific error details below and modify your configuration file appropriately.
Parser Error Message: Could not load file or assembly ‘Microsoft.Exchange.Clients.Strings, Version-15.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35’ or one of its dependencies. The system cannot find the file specified.
Reviewing the services in the services console show that the Microsoft Exchange Transport service is stuck at Starting:
Attempting to launch the Management Shell will also fail:
Making an attempt to perform a recover server install of the will also fail during the Finalizing Setup step:
Performing Microsoft Exchange Server Prerequisite Check
Configuring Prerequisites COMPLETED
Prerequisite Analysis COMPLETED
Configuring Microsoft Exchange Server
Preparing Setup COMPLETED
Stopping Services COMPLETED
Copying Exchange Files COMPLETED
Language Files COMPLETED
Restoring Services COMPLETED
Language Configuration COMPLETED
Mailbox role: Transport service COMPLETED
Mailbox role: Client Access service COMPLETED
Mailbox role: Unified Messaging service COMPLETED
Mailbox role: Mailbox service COMPLETED
Exchange Management Tools COMPLETED
Client Access role: Client Access Front End service COMPLETED
Client Access role: Front End Transport service COMPLETED
Finalizing Setup FAILED
The following error was generated when "$error.Clear();
start-SetupService -ServiceName MSExchangeFrontendTransport
" was run: "Microsoft.Exchange.Configuration.Tasks.ServiceDidNotReachStatusExcep
tion: Service 'MSExchangeFrontendTransport' failed to reach status 'Running' on
this server.
at Microsoft.Exchange.Configuration.Tasks.Task.ThrowError(Exception exception
, ErrorCategory errorCategory, Object target, String helpUrl)
at Microsoft.Exchange.Configuration.Tasks.Task.WriteError(Exception exception
, ErrorCategory category, Object target)
at Microsoft.Exchange.Management.Tasks.ManageSetupService.WaitForServiceStatu
s(ServiceController serviceController, ServiceControllerStatus status, Unlimited
`1 maximumWaitTime, Boolean ignoreFailures, Boolean sendWatsonReportForHungServi
ce)
at Microsoft.Exchange.Management.Tasks.ManageSetupService.StartService(Servic
eController serviceController, Boolean ignoreServiceStartTimeout, Boolean failIf
ServiceNotInstalled, Unlimited`1 maximumWaitTime, String[] serviceParameters)
at Microsoft.Exchange.Management.Tasks.ManageSetupService.StartService(String
serviceName, Boolean ignoreServiceStartTimeout, Boolean failIfServiceNotInstall
ed, Unlimited`1 maximumWaitTime, String[] serviceParameters)
at Microsoft.Exchange.Management.Tasks.StartSetupService.InternalProcessRecor
d()
at Microsoft.Exchange.Configuration.Tasks.Task.<ProcessRecord>b__b()
at Microsoft.Exchange.Configuration.Tasks.Task.InvokeRetryableFunc(String fun
cName, Action func, Boolean terminatePipelineIfFailed)".
The Exchange Server setup operation didn't complete. More details can be found
in ExchangeSetup.log located in the <SystemDrive>:\ExchangeSetupLogs folder.
C:\SP3 CU10>
Solution
This issue had me stumped for a while because there was no way to get into the management console or shell to review the configuration and determine how the receive and send connectors were configured and which one of them was causing the transport service to be stuck starting. What I ended up being to find as a workaround for this issue was to download the following tool:
Exchange Management Console Troubleshooter
https://gallery.technet.microsoft.com/Exchange-Management-b9d918b1
Run the EMTshooter.ps1 PS script:
Run the following command to add the PowerShell snapin:
Add-PSsnapin Microsoft.Exchange.Management.PowerShell.E2010
Then use the Get-ReceiveConnector to review the receive connector configuration. Having the ability to execute cmdlets allowed me to discover that one of the connectors (Allow Anonymous Relay) was mistakenly created as a HubTransport receive connector when it was supposed to be a FrontendTransport type causing the transport service to not be able to start:
Get-ReceiveConnector | where-object {$_.TransportRole -match "HubTransport"} | where-object {$_.Identity -like "SVR-MAIL-03*"}
Disabling the connector allowed with the cmdlet allowed the transport service to start and the EAC to be accessible again.