win7 PC 上的 ASP.NET ETW 提供程序丢失

Posted

技术标签:

【中文标题】win7 PC 上的 ASP.NET ETW 提供程序丢失【英文标题】:The ASP.NET ETW provider on a win7 PC is missing 【发布时间】:2015-07-03 01:51:04 【问题描述】:

我正在编写一个 ETW 消费者来监听 ASP.NET 事件。下面的示例代码在可以看到 ASP.NET 提供程序的 Windows 2008 服务器上运行良好。我遇到的问题是在我的 Win7 (64) PC 上,我看不到 ASP.NET 提供程序,因此此代码将所有事件显示为“未处理”。 我已确保已安装跟踪功能并且 applicationhost.config 文件中包含相应的值。

当我执行 logman –query providers 时,我看不到 ASP.NET AFF081FE-0247-4275-9C4E-021F3DC1DA35 提供程序在 PC 上,但我在我正在测试的 Win2008 服务器上看到了这个。

如何执行以下两项之一: 将此作为提供程序添加到我的 Win7 PC 吗?

让代码能够处理此消息并在我的代码中提供清单。当我将“AFF081FE-0247-4275-9C4E-021F3DC1DA35”设置为提供者时,我确实收到了事件,但它们来自未知的提供者。所以我猜测清单内容丢失了。

我的示例代码如下

    static void Test3()
    
        var sessionName = "ASPNETMonitorSession";
        using (var session = new TraceEventSession(sessionName, null))  
        
            Console.WriteLine("Starting Test1");
            session.StopOnDispose = true;
            Console.CancelKeyPress += delegate(object sender, ConsoleCancelEventArgs e)
            
                session.Dispose();
            ;
            using (var source = new ETWTraceEventSource(sessionName, TraceEventSourceType.Session))
            
                Action<TraceEvent> action = delegate(TraceEvent data)
                
                    Console.WriteLine("GOT EVENT: " + data.ToString());
                ;

                var registeredParser = new RegisteredTraceEventParser(source);
                registeredParser.All += action;
                source.UnhandledEvents += delegate(TraceEvent data)
                
                    if ((int)data.ID != 0xFFFE)         
                        Console.WriteLine("GOT UNHANDLED EVENT: " + data.Dump());
                ;

                session.EnableProvider(new Guid("AFF081FE-0247-4275-9C4E-021F3DC1DA35"));
                Console.WriteLine("Starting Listening for events");
                source.Process();                                                              
            
        
        Console.WriteLine("Done");
        return;
    

【问题讨论】:

【参考方案1】:

ASP.NET 跟踪在您的本地计算机上不可用的原因是它没有安装。如果您查看perfview 帮助,它会为您提供有关如何启用它的说明。

仅供参考 perfview 使用TracEevent 来捕获跟踪。

在这里

ASP.NET 事件 ASP.NET 有一组事件,当每个 请求是过程。 PerfView 有一个可以打开的特殊视图 当 ASP.NET 事件打开时。默认情况下,PerfView 打开 ASP.NET 事件,但是,您还必须选择“跟踪” 安装 ASP.NET 以使这些事件正常工作时的选项。因此,如果 您没有看到 ASP.NET 事件 您正在运行 ASP.NET 方案 这可能是您没有获取数据的原因之一。

打开 ASP.NET 跟踪

开启追踪的最简单方法是使用随附的 DISM 工具 与操作系统。从一个运行以下命令 提升的命令提示符

DISM /online /Enable-Feature /FeatureName:IIS-HttpTracing

注意这个命令会重启web服务(使其生效), 如果您的 ASP.NET 服务处理时间过长,这可能会导致并发症 (许多秒)请求。这将强制 DISM 延迟(对于 重新启动)或中止未完成的请求。因此,您可能希望 将此与其他服务器维护一起安排。一旦这个配置 在特定机器上完成,它仍然存在。你也可以做 使用 GUI 界面手动进行此配置。你首先需要 进入配置windows软件的对话框。这不同 取决于您使用的是客户端版本还是服务器版本 操作系统。

在客户端 - 开始 -> 控制面板 -> 程序 -> 程序和 功能 -> 打开或关闭 Windows 功能 -> Internet 信息服务 -> 万维网服务 -> 健康和诊断 -> 跟踪服务器 - 开始 -> 计算机 -> 右键 单击 -> 管理角色 -> Web 服务器 (IIS) -> 滚动服务添加角色 服务运行状况和诊断 -> 跟踪

希望这会有所帮助。

【讨论】:

以上是关于win7 PC 上的 ASP.NET ETW 提供程序丢失的主要内容,如果未能解决你的问题,请参考以下文章

Win7上的ASP.NET MVC3项目在Win10上运行的一个坑

asp.net mvc内微信pc端H5JsApi支付方式总结

列出 ETW 提供程序的事件类

ETW 提供者的频道名称

在没有 Visual Studio 的 PC 上本地演示 asp.net mvc 应用程序 [关闭]

从网络上的另一台电脑访问 ASP.NET 开发服务器