2017-09-15 21 views
0

我有一个WCF服务,在这里我使用Application Insights SDK以这种方式测量时间。如何注入Application Insights代码来监视所有方法中的时间点

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)] 
    [ServiceBehavior(IncludeExceptionDetailInFaults = true)] 
    [BasicHttpBindingServiceMetadataExchangeEndpoint] 
    public class DMSWebService : IDMSWebService 
    { 
     public static readonly string LoggingPrefix = "DMSWebService"; 
     private TelemetryClient telemetry; 

     //Defines if Application Insights must be enabled or not 
     public Boolean EnableApplicationInsights { get; set; } 

     //Application Insights Instrumentation Key 
     public string ApplicationInsightsMonitoringKey { get; set; } 

     //Constructor to get the property bag values only once. 
     public DMSWebService() 
     { 
      InitializeApplicationInsights(); 
      telemetry= new TelemetryClient {InstrumentationKey = ApplicationInsightsMonitoringKey}; 
     } 

     //Method to initialize ApplicationInsightSettings 
     private void InitializeApplicationInsights() 
     { 
      bool enableApplicationInsights = false; 
      using (var billingSite = BillingManagement.GetBillingSite()) 
      { 
       enableApplicationInsights = Convert.ToBoolean(billingSite.WebApplication.GetProperty(Constants.WebApplicationSettings.EnableApplicationInsights)); 
       if(enableApplicationInsights) ApplicationInsightsMonitoringKey = billingSite.WebApplication.GetProperty(Constants.WebApplicationSettings.ApplicationInsightsKey); 
      } 

      EnableApplicationInsights = enableApplicationInsights; 
     } 
     #region Billing 

     #region Archiving 

     // GET 
     public DMSServiceResult ArchiveBillCycle(string listItemId) 
     { 
      var stopwatch = System.Diagnostics.Stopwatch.StartNew(); 

      using (var withDMSServiceResult = new WithDMSServiceResult(LoggingPrefix, "ArchiveBillCycle")) 
      { 
       try 
       { 
        withDMSServiceResult.InputParameters["listItemId"] = listItemId; 

        var listItemIdAsInt = Convert.ToInt32(listItemId); 

        using (var billingSite = BillingManagement.GetBillingSite()) 
        { 
         // HACK: Necessary to disable form digest validation, which we don't need. 
         using (var continueWithoutSPContext = new ContinueWithoutSPContext()) 
         { 
          withDMSServiceResult.RequestSucceeded = BillingRepository.ArchiveBillCycle(billingSite.RootWeb, listItemIdAsInt); 
         } 
        } 
       } 
       catch (Exception ex) 
       { 
        telemetry.TrackException(ex); 
        withDMSServiceResult.HandleError(ex); 
       } 

       stopwatch.Stop(); 
       var metrics = new Dictionary <string, double>{{"processingTime", stopwatch.Elapsed.TotalMilliseconds}}; 
       // Set up some properties: 
       var properties = new Dictionary <string, string>{{"listItemId", withDMSServiceResult.InputParameters["listItemId"]}}; 
       if(EnableApplicationInsights) telemetry.TrackEvent("ArchiveBillCycle", properties, metrics); 

       return withDMSServiceResult.Result; 
      } 
     } 

     #endregion 

正如你可以看到我的方法开始启动秒表,然后我在方法结束发送事件的应用见解。

为web服务上的所有10种方法做这件事并不是什么大事,我已经做到了。

然而,这些方法在其他类中调用实用程序方法,找到瓶颈的唯一方法是测量每种方法。

你的建议是什么?

请注意,trackEvent有一个属性字段,有时我使用它,有时我只是发送空。

THX

回答

相关问题