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

如何使用C# .NET检测IIS应用程序池重启与崩溃并生成告警

检测IIS应用池崩溃可用的C# .NET相关类库/包

1. System.Diagnostics.EventLog(原生内置)

  • 支持.NET Framework、.NET Core 3.0+、.NET 5+所有版本,无需额外安装NuGet包
  • 可直接监听Windows系统事件日志,IIS应用池崩溃、异常停止时,Windows进程激活服务(WAS)会在System日志通道生成事件ID为5002、5010、5011的错误记录,匹配对应事件即可触发告警
  • 参考代码示例:
// 监听系统日志中WAS来源的事件
var eventLog = new EventLog("System", Environment.MachineName, "WAS");
eventLog.EntryWritten += (sender, e) =>
{
    // 筛选应用池崩溃相关事件ID
    if (e.Entry.InstanceId is 5002 or 5010 or 5011)
    {
        // 从日志信息中提取崩溃的应用池名称,执行告警逻辑
        Console.WriteLine($"检测到应用池异常:{e.Entry.Message}");
    }
};
eventLog.EnableRaisingEvents = true;

2. Microsoft.Web.Administration(官方IIS管理包)

  • 微软官方推出的IIS管理类库,需从NuGet源安装对应版本的包
  • 除了可以配合事件日志做被动监听外,还支持主动轮询指定应用池的运行状态,可覆盖事件日志漏报的场景
  • 参考代码示例:
using Microsoft.Web.Administration;

// 主动拉取所有应用池运行状态
using var serverManager = new ServerManager();
foreach (var pool in serverManager.ApplicationPools)
{
    // 仅检测你指定的需要监控的应用池
    if (pool.Name == "你的目标应用池名称" && pool.State == ObjectState.Stopped)
    {
        // 执行告警、自动重启等逻辑
        Console.WriteLine($"应用池{pool.Name}已异常停止");
    }
}

3. System.Diagnostics.PerformanceCounter(原生内置)

  • .NET原生提供的性能计数器访问类库,无需额外安装包
  • 可通过监控W3SVC_W3WP分类下的工作进程相关计数器,判断应用池对应的w3wp进程是否意外退出,适配部分自定义配置下事件日志不记录崩溃的场景

注意:服务运行的账号需要授予事件日志读取、IIS管理访问的权限,否则会出现权限不足导致的读取失败问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 02:54:02