Application Insights - код захвата имен ASMX WebMethod не запускается - PullRequest
0 голосов
/ 05 октября 2018

В одном из моих заданий я должен получить имя метода веб-службы в приложении Insight.

Я ссылаюсь ниже на ссылку
https://unhandled.wordpress.com/2018/02/11/application-insights-capture-asmx-webmethod-names-invoked/

, написанную ниже кода в моем файле класса.

public class ApplicationInsightsMethodLogInitializer: ITelemetryInitializer
    {
        public void Initialize(ITelemetry telemetry)
        {
            var requestTelemetry = telemetry as RequestTelemetry;
            string soapActionMethod = null;
            string requestMethodName = null;
            string webServiceMethod = null;
            var logger = Sitecore.DependencyInjection.ServiceLocator.ServiceProvider.GetService<ILogger>();
            logger.Info("HI Pradeep Here");
            // Is this a TrackRequest() ?
            if (requestTelemetry == null) return;
            requestMethodName = System.Web.HttpContext.Current.Request.Params["op"]; // Item("HTTP_SOAPACTION");
            if (requestMethodName == "" || requestMethodName == null)
            {
                if (System.Web.HttpContext.Current.Request.PathInfo != null)
                {
                    requestMethodName = System.Web.HttpContext.Current.Request.PathInfo;
                }
                if (requestMethodName != "" && requestMethodName != null)
                {
                    logger.Info("Got It..");
                    requestMethodName = requestMethodName.Replace("/", "");
                    // If we set the Success property, the SDK won't change it:
                    requestTelemetry.Success = true;
                    // Allow us to filter these requests in the portal:
                    requestTelemetry.Properties["WebMethodName"] = requestMethodName;
                    webServiceMethod = requestMethodName;
                }
            }
            if (webServiceMethod != null)
            {
                requestTelemetry.Context.Operation.Name = requestTelemetry.Context.Operation.Name.Replace("/" + webServiceMethod, "") + "/" + webServiceMethod;
            }
        }

Затем зарегистрируйте его в ApplicationInsights.config:

 <Add Type="Microsoft.ApplicationInsights.Web.ClientIpHeaderTelemetryInitializer, Microsoft.AI.Web"/>
    <Add Type="Microsoft.ApplicationInsights.Web.OperationNameTelemetryInitializer, Microsoft.AI.Web"/>
    <Add Type="GCC.Foundation.Analytics.ApplicationInsightsMethodLogInitializer, GCC.Foundation.Analytics" />

Во время выполнения кода в файле класса этот код не запускается и отладчик также не запускается.

Результат должен быть похож на webserviceName / MethodName.

Я пытался вызвать этот код из явных вызовов, выполняющихся из-за того, что вызывается метод класса.

я что-то пропустил в этом, поэтому ApplicationInsightsMethodLogInitializer - нетсрабатывание.

Во всех сценариях вызов зависимостей регистрируется в приложении, но мои изменения не приходят.

помогите мне в этом.

1 Ответ

0 голосов
/ 08 октября 2018

Для проекта asp.net mvc, пожалуйста, установите информацию о приложении, щелкнув правой кнопкой мыши на имени проекта -> Настройка информации о приложении: enter image description here

И, пожалуйста, убедитесь, что он регистрируетсяправильно в ApplicationInsights.config, он должен следовать приведенному ниже правилу:

<Add Type "Fully qualified type name, assembly name"/>

Или вы можете создать экземпляр инициализатора в коде, например, в Global.aspx.cs:

    protected void Application_Start()
    {

     TelemetryConfiguration.Active.TelemetryInitializers.Add(new MyTelemetryInitializer());
    }

Подробнее см. Здесь .

Я проверил это на своей стороне, либо зарегистрируйтесь в ApplicationInsights.config, либо в коде, оба работают нормально.

Пример моего инициализатора:

namespace WebMVCStandard
{
    public class MyTelemetryInitializer:ITelemetryInitializer
    {
        public void Initialize(ITelemetry telemetry)
        {
            if (!telemetry.Context.Properties.ContainsKey("Application123"))
            {
                telemetry.Context.Properties.Add("Application123", "todoxxxx");
            }
        }
    }
}

Зарегистрируйтесь в ApplicationInsights.config:

<TelemetryInitializers>
  <Add Type ="WebMVCStandard.MyTelemetryInitializer,WebMVCStandard"/>
</TelemetryInitializers>

Или в коде в Global.aspx.cs:

namespace WebMVCStandard
{
    public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
            TelemetryConfiguration.Active.TelemetryInitializers.Add(new MyTelemetryInitializer());
        }
    }
}

После выполнения вы увидитекласс инициализатора включен в режиме отладки: enter image description here

А также новое свойство добавляется после вызова класса инициализатора: enter image description here

...