Error executing child request for /owa/auth/errorFE.aspx

Если по каким-либо причинам отключали FBA авторизацию для OWA и ECP (например для публикации ресурсов через TMG) и у вас несколько AD сайтов с установленными в них Exchange серверами, то вполне вероятно вы столкнетесь с ошибкой из темы этой статьи: Error executing child request for /owa/auth/errorFE.aspx

Эта проблема актуальная начиная с CU7 (возможно с CU6) и вплоть до CU10 включительно. На данный момент решения нету, но есть обходное решение.



Update 10.11.2015: Хоть и обходное решение решает проблему с доступом к ECP пользователей, но пробы для указанных ниже компонентов все равно проходят с ошибкой.


Рассмотрим следующий сценарий:

  • Есть два Exchange сервера (Server1 и Server2) в разных AD сайтах (Site1 и Site2)
  • На сервере Server1 для ECP отключена FBA
  • Пользователь, чей ящик находится на сервере Server2, подключается к CAS серверу Server1
  • Сервер Server2 имеет значение ExternalURL для ECP


Если все условия соблюдены, то пользователь получит следующую ошибку в браузере. При этом, доступ в OWA работает без ошибок.

image

При этом, после установки CU7 и выше, следующие компоненты становятся Unhealthy:

[PS] C:\>Get-HealthReport -Server Server1 -HealthSet ECP.Proxy

Server              State               HealthSet           AlertValue          LastTransitionTime  MonitorCount
------              -----               ---------           ----------          ------------------  ------------
Server1             Online              ECP.Proxy           Unhealthy           2/24/2015 4:50:3... 1

 
[PS] C:\>Get-HealthReport -Server Server1 -HealthSet RWS.Proxy

Server              State               HealthSet           AlertValue          LastTransitionTime  MonitorCount
------              -----               ---------           ----------          ------------------  ------------
Server1             Online              RWS.Proxy           Unhealthy           2/24/2015 4:50:3... 11

Скорее всего вы первым увидите эти «нездоровые» компоненты, а уже потом ошибку в ECP.


Итак, начинаем смотреть почему эти компоненты «нездоровы».

Чтобы определить, какая именно проба и с какой ошибкой была причиной перевода монитор в нездоровое состояние, воспользуемся следующей командой:

[PS] C:\>Get-ServerHealth Server1 -HealthSet ECP.Proxy | ?{$_.alertvalue -ne 'healthy' -and $_.Alertvalue -ne 'Disabled'} | fl


RunspaceId              : 85417d7a-6720-4e63-9d9e-6ee95ec58397
Server                  : Server1
CurrentHealthSetState   : Online
Name                    : ECPProxyTestMonitor
TargetResource          : MSExchangeECPAppPool
HealthSetName           : ECP.Proxy
HealthGroupName         : ServiceComponents
AlertValue              : Unhealthy
FirstAlertObservedTime  : 2/24/2015 4:38:44 PM
Description             : 
IsHaImpacting           : True
RecurranceInterval      : 0
DefinitionCreatedTime   : 11/10/2015 12:03:00 PM
HealthSetDescription    : 
ServerComponentName     : EcpProxy
LastTransitionTime      : 2/24/2015 5:38:49 PM
LastExecutionTime       : 11/10/2015 12:03:37 PM
LastExecutionResult     : Succeeded
ResultId                : 99032835
WorkItemId              : 9
IsStale                 : False
Error                   : 
Exception               : 
IsNotified              : False
LastFailedProbeId       : 8
LastFailedProbeResultId : 62842099
ServicePriority         : 2
Identity                : ECP.Proxy\ECPProxyTestMonitor\MSExchangeECPAppPool
IsValid                 : True
ObjectState             : New

Нас интересует ID пробы, которая стала причиной перевода монитор в «нездоровое» состояние. В данном случае ID = 62842099.

Используя этот ID, пытаемся найти в эвент логе Managed Availability соответствующее событие:

[PS] C:\>(Get-WinEvent –ComputerName Server1 -LogName Microsoft-Exchange-ActiveMonitoring/ProbeResult -FilterXPath "*[UserData[EventXML[ResultId='62842099'][ResultType='4']]]" | % {[XML]$_.toXml()}).event.userData.eventXml


auto-ns2           : http://schemas.microsoft.com/win/2004/08/events
xmlns              : myNs
ResultId           : 62842099
ServiceName        : ECP.Proxy
IsNotified         : 0
ResultName         : ECPProxyTestProbe/MSExchangeECPAppPool
WorkItemId         : 8
DeploymentId       : 0
MachineName        : Server1
Error              : The remote server returned an error: (500) Internal Server Error.
Exception          : System.ApplicationException: The remote server returned an error: (500) Internal Server Error.
                        at Microsoft.Exchange.Monitoring.ActiveMonitoring.ClientAccess.CafeLocalProbe.DoWork(CancellationToken cancellationToken)
                        at Microsoft.Office.Datacenter.WorkerTaskFramework.WorkItem.Execute(CancellationToken joinedToken)
                        at Microsoft.Office.Datacenter.WorkerTaskFramework.WorkItem.<>c__DisplayClass2.<StartExecuting>b__0()
                        at System.Threading.Tasks.Task.Execute()
RetryCount         : 0
StateAttribute1    : 2937555f-30bd-4c48-a8f9-5f6401f83a8b
StateAttribute2    : HealthMailbox01e8ddaeea424555ba596bd9f0ad85d2@contoso.com
StateAttribute3    : [null]
StateAttribute4    : [null]
StateAttribute5    : [null]
StateAttribute6    : 0
StateAttribute7    : 0
StateAttribute8    : 0
StateAttribute9    : 0
StateAttribute10   : 0
StateAttribute11   : [null]
StateAttribute12   : [null]
StateAttribute13   : [null]
StateAttribute14   : [null]
StateAttribute15   : [null]
StateAttribute16   : 0
StateAttribute17   : 0
StateAttribute18   : 0
StateAttribute19   : 0
StateAttribute20   : 0
StateAttribute21   : [null]
StateAttribute22   : [null]
StateAttribute23   : [null]
StateAttribute24   : [null]
StateAttribute25   : [null]
ResultType         : 4
ExecutionId        : 67075444
ExecutionStartTime : 2015-11-10T09:03:37.5244980Z
ExecutionEndTime   : 2015-11-10T09:03:37.5557511Z
PoisonedCount      : 0
ExtensionXml       : [null]
SampleValue        : 31
ExecutionContext   : Probe Absolute Timeout=60000ms, Timeout Value=60000ms, Calculated HttpRequest Timeout=59000ms
                     FailedResponse after 0 milliseconds. The remote server returned an error: (500) Internal Server Error.
                     
                     [000.000] Probe Absolute Timeout=60000ms, Timeout Value=60000ms, Calculated HttpRequest Timeout=59000ms
                     
                     [000.000] Starting HTTP request task
                     [000.000] Waiting 59000 ms
                     [000.000] Issuing GET against https://localhost/ecp/
                     [000.000] Awaiting GET response
                     [000.016] Performing SSL validation
                     [000.031] Failed with exception: The remote server returned an error: (500) Internal Server Error.
                     
FailureContext     : [null]
FailureCategory    : -1
ScopeName          : [null]
ScopeType          : [null]
HealthSetName      : [null]
Data               : [null]
Version            : 65536

Собственно ошибка говорит о том, что есть какие-то проблемы в IIS.

Далее, исследуя логи IIS и HttpProxy, можно найти следующую строку:

2015-02-24T13:53:37.779Z,242d3463-31e5-4faf-bcf6-3ef164e9bd0d,15,0,1044,21,,Ecp,localhost,/ecp/,,Negotiate,true,domain\HealthMailbox1763f9e,,Sid~S-1-5-21-2095683843-2388218923-3782530935-1152,AMProbe/Local/ClientAccess,::1,Server1,500,,InternalServerError,GET,,,,,WindowsIdentity,,,,0,,,,0,0,,0,,0,,0,0,,0,2,0,,,,,,,,,0,2,0,,2,,2,2,,,,BeginRequest=2015-02-24T13:53:37.779Z;CorrelationID=<empty>;ProxyState-Run=None;ProxyState-Complete=CalculateBackEnd;EndRequest=2015-02-24T13:53:37.779Z;,HttpException=System.Web.HttpException (0x80004005): Error executing child request for /owa/auth/errorFE.aspx. ---> System.NullReferenceException: Object reference not set to an instance of an object.    at Microsoft.Exchange.Clients.Owa.Core.OwaPage.InitializeCulture()    at ASP.errorfe_aspx.FrameworkInitialize()    at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint  Boolean includeStagesAfterAsyncPoint)    at System.Web.UI.Page.ProcessRequest()    at System.Web.UI.Page.ProcessRequest(HttpContext context)    at System.Web.HttpServerUtility.ExecuteInternal(IHttpHandler handler  TextWriter writer  Boolean preserveForm  Boolean setPreviousPage  VirtualPath path  VirtualPath filePath  String physPath  Exception error  String queryStringOverride)    at System.Web.HttpServerUtility.ExecuteInternal(IHttpHandler handler  TextWriter writer  Boolean preserveForm  Boolean setPreviousPage  VirtualPath path  VirtualPath filePath  String physPath  Exception error  String queryStringOverride)    at System.Web.HttpServerUtility.Execute(String path  TextWriter writer  Boolean preserveForm)    at System.Web.HttpServerUtility.Transfer(String path)    at Microsoft.Exchange.HttpProxy.AspNetHelper.TransferToRedirectPage(HttpContext httpContext  String redirectUrl  LegacyRedirectTypeOptions redirectType)    at Microsoft.Exchange.HttpProxy.ProxyRequestHandler.HandleHttpException(HttpException exception)    at Microsoft.Exchange.HttpProxy.ProxyRequestHandler.CompleteWithError(Exception ex  String label)    at Microsoft.Exchange.HttpProxy.ProxyRequestHandler.HandleBackEndCalculationException(Exception exception  AnchorMailbox anchorMailbox  String label)    at Microsoft.Exchange.HttpProxy.ProxyRequestHandler.<>c__DisplayClass3f.<OnCalculateTargetBackEndCompleted>b__3e()    at Microsoft.Exchange.Common.IL.ILUtil.DoTryFilterCatch(TryDelegate tryDelegate  FilterDelegate filterDelegate  CatchDelegate catchDelegate)    at Microsoft.Exchange.HttpProxy.Diagnostics.SendWatsonReportOnUnhandledException(MethodDelegate methodDelegate  LastChanceExceptionHandler exceptionHandler)    at Microsoft.Exchange.HttpProxy.ProxyRequestHandler.CallThreadEntranceMethod(MethodDelegate method);

Что в итоге дает нам ошибку «error executing child request for /owa/auth/errorFE.aspx«. Ошибка та же самая, что и при доступе к ECP через браузер.


Как чинить

Собственно есть 2 варианта «временного решения»:

  1. Включить FBA для ECP
  2. Проделать предлагаемы шаги из статьи https://support.microsoft.com/en-us/kb/3098561 как временное решение (очень напоминает режим сосуществования Exchange 2010 и Exchange 2007 :))


В указанной статье KB3098561 описывается сценарий, когда в сайте Site2 для ECP назначен ExternalURL. В качестве доп. информации указывается, что проблема существует для отключенного FBA и когда происходит редирект ECP в другой сайт.

Но это не совсем так. Вспомним какие варианты могут быть для ECP в принятии решения «проксировать или редиректить»:

  1. Если ящик находится в том же сайте – проксируем
  2. Если ящик находится в другом сайте и в нем нету ExternalURL – проксируем
  3. Если ящик находится в другом сайте и в нем есть ExternalURL, но он такой же как и в исходном сайте – проксируем
  4. Если ящик находится в другом сайте и в нем есть ExternalURL, но он отличен от ExternalURL в исходном сайте – редиректим

Т.е. редирект происходит только в одном случае, но проблема так же есть и при варианте №3.


Остается применить обходное решение и ждать исправление ошибки, которая может уже будет в CU11.

Читайте также:

Добавить комментарий