Окружающая среда
- ASP.NET WebAPI вызывает внешние клиентские службы.
Трассировка входящих XRay применяется в Global.asax через
AWSXRayASPNET.RegisterXRay(this, "CustomerAPI");
Экземпляр HttpClient скрыт как частный член в служебном классе, совместно используемый в отдельном проекте с несколькими WebAPI
HttpClient, имеющий делегирующий обработчик для Xray, включает следующее: - (Ссылка: . NET HttpClient для исходящего XRay)
bool isXrayEnabled = false; bool.TryParse(Config["XRayEnable"], out isXrayEnabled); if (isXrayEnabled) { Logger.Info("Enabling XRay tracing with Http calls"); httpClient = new HttpClient(new HttpClientXRayTracingHandler(new HttpClientHandler())); } else { httpClient = new HttpClient(); Logger.Info("Disabling XRay tracing with Http calls"); }
Проблема. Хотя все API показывают входящую трассировку XRay, исходящая трассировка не отображается вообще.
Вместо этого в журналах XRay отображается следующая ошибка.
Exception type: EntityNotAvailableException
Exception message: Entity doesn't exist in HTTPContext
at Amazon.XRay.Recorder.Core.Internal.Context.HybridContextContainer.InjectEntityInTraceContext()
at Amazon.XRay.Recorder.Core.AWSXRayRecorderImpl.AddHttpInformation(String key, Object value)
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at Amazon.XRay.Recorder.Core.AWSXRayRecorderImpl.AddHttpInformation(String key, Object value)
at Amazon.XRay.Recorder.Handlers.AspNet.AWSXRayASPNET.ProcessHTTPResponse(Object sender, EventArgs e)
at System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step)
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)