Esempio n. 1
0
        /// <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());
            }
        }
Esempio n. 2
0
        /// <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)));
        }