/// <summary> /// OnMethodBegin callback /// </summary> /// <typeparam name="TTarget">Type of the target</typeparam> /// <param name="instance">Instance value, aka `this` of the instrumented method.</param> /// <param name="instanceArg">RequestContext instance</param> /// <param name="inputs">Input arguments</param> /// <returns>Calltarget state value</returns> internal static CallTargetState OnMethodBegin <TTarget>(TTarget instance, object instanceArg, object[] inputs) { // TODO Just use the OperationContext.Current object to get the span information // context.IncomingMessageHeaders contains: // - Action // - To // // context.IncomingMessageProperties contains: // - ["httpRequest"] key to find distributed tracing headers if (!Tracer.Instance.Settings.IsIntegrationEnabled(WcfCommon.IntegrationId) || !Tracer.Instance.Settings.DelayWcfInstrumentationEnabled || WcfCommon.GetCurrentOperationContext is null) { return(CallTargetState.GetDefault()); } var operationContext = WcfCommon.GetCurrentOperationContext(); if (operationContext != null && operationContext.TryDuckCast <IOperationContextStruct>(out var operationContextProxy)) { return(new CallTargetState(WcfCommon.CreateScope(operationContextProxy.RequestContext))); } else { return(CallTargetState.GetDefault()); } }
/// <summary> /// OnMethodBegin callback /// </summary> /// <typeparam name="TTarget">Type of the target</typeparam> /// <typeparam name="TRequestContext">Type of the request context</typeparam> /// <typeparam name="TOperationContext">Type of the operation context</typeparam> /// <param name="instance">Instance value, aka `this` of the instrumented method.</param> /// <param name="request">RequestContext instance</param> /// <param name="currentOperationContext">OperationContext instance</param> /// <returns>Calltarget state value</returns> internal static CallTargetState OnMethodBegin <TTarget, TRequestContext, TOperationContext>(TTarget instance, TRequestContext request, TOperationContext currentOperationContext) where TRequestContext : IRequestContext, IDuckType { if (Tracer.Instance.Settings.DelayWcfInstrumentationEnabled || request.Instance is null) { return(CallTargetState.GetDefault()); } return(new CallTargetState(WcfCommon.CreateScope(request))); }