You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为基于ServiceBase的Windows Service启用Application Insights?

解决方案:在Windows Service中集成Application Insights

不需要依赖ServiceCollection,直接通过TelemetryConfiguration和TelemetryClient就能完成配置,以下是完整实现步骤:

1. 必要的引用

确保已添加Microsoft.ApplicationInsights NuGet包,然后在服务类中添加命名空间引用:

using Microsoft.ApplicationInsights;
using Microsoft.ApplicationInsights.Extensibility;
using System.Configuration; // 从配置文件读取密钥时需要

2. 修改RetrievalService类

在服务中初始化遥测客户端,并在启动、停止环节发送事件,同时确保停止时刷出所有未发送数据:

public partial class RetrievalService : ServiceBase
{
    private TelemetryClient _telemetryClient;

    public RetrievalService()
    {
        InitializeComponent();

        // 初始化Application Insights配置
        var telemetryConfig = TelemetryConfiguration.CreateDefault();
        // 方式1:硬编码密钥(不推荐)
        // telemetryConfig.InstrumentationKey = "你的InstrumentationKey";
        // 方式2:从app.config读取(推荐)
        telemetryConfig.InstrumentationKey = ConfigurationManager.AppSettings["ApplicationInsights:InstrumentationKey"];

        // 创建全局遥测客户端实例(建议复用,不要频繁创建)
        _telemetryClient = new TelemetryClient(telemetryConfig);
        // 设置服务角色名称,方便在App Insights后台区分不同服务
        _telemetryClient.Context.Cloud.RoleName = "RetrievalService";
    }

    protected override void OnStart(string[] args)
    {
        // 发送服务启动事件和日志
        _telemetryClient.TrackEvent("RetrievalService_Started");
        _telemetryClient.TrackTrace("服务启动完成,开始执行业务逻辑", Microsoft.ApplicationInsights.DataContracts.SeverityLevel.Information);
        
        // 在此添加你的业务启动逻辑
    }

    protected override void OnStop()
    {
        // 发送服务停止事件
        _telemetryClient.TrackEvent("RetrievalService_Stopped");
        _telemetryClient.TrackTrace("服务已停止", Microsoft.ApplicationInsights.DataContracts.SeverityLevel.Information);

        // 刷新所有未发送的遥测数据,避免进程退出导致数据丢失
        _telemetryClient.Flush();
        // 等待1秒确保数据发送完成(可根据实际情况调整时长)
        System.Threading.Thread.Sleep(1000);
        
        // 在此添加你的业务停止清理逻辑
    }
}

3. 配置文件方式(可选)

如果不想硬编码密钥,在app.config中添加配置项:

<configuration>
  <appSettings>
    <add key="ApplicationInsights:InstrumentationKey" value="你的实际InstrumentationKey" />
  </appSettings>
</configuration>

关键注意事项

  • 复用TelemetryClient实例:不要在每次发送遥测时创建新的TelemetryClient,全局单例复用即可。
  • 停止时必须调用Flush:Windows Service停止时进程会快速终止,调用Flush()并等待一段时间,能确保所有缓存的遥测数据被发送到App Insights服务器。
  • 扩展遥测类型:除了事件和日志,还可以用TrackException、TrackMetric等方法发送异常、性能指标等数据。

内容的提问来源于stack exchange,提问作者Cherylaksh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 14:57:48