Windows服务开发:FiddlerCore及应用AfterSessionComplete事件未触发(控制台调试)
排查Fiddler AfterSessionComplete事件未触发的几个方向
嘿,我之前调试Fiddler集成的控制台程序时也碰到过类似的事件不触发问题,给你几个实用的排查点:
先确认事件订阅时机是否正确
一定要在FiddlerApplication.Startup()调用之前完成AfterSessionComplete事件的订阅。如果启动Fiddler之后再绑定事件,不仅之前的会话捕获不到,后续的会话也可能无法触发事件。比如你的fiddler.cs里应该有类似这样的顺序:// 先订阅事件 FiddlerApplication.AfterSessionComplete += FiddlerApplication_AfterSessionComplete; // 再启动Fiddler FiddlerApplication.Startup(8888, true, true);验证Fiddler是否真的捕获到了会话
事件不触发的前提可能是根本没有会话产生。你需要确保有HTTP/HTTPS请求通过Fiddler代理:- 手动设置你的测试请求的代理地址为
http://localhost:8888(Fiddler默认端口) - 或者在启动Fiddler时开启系统代理(
FiddlerApplication.Startup的第二个参数设为true)
可以先加个BeforeRequest事件测试,如果这个事件也没触发,说明Fiddler根本没在工作,先解决基础的代理和启动问题。
- 手动设置你的测试请求的代理地址为
检查控制台程序的生命周期
控制台程序默认启动后如果主线程没有阻塞,会直接退出,根本等不到异步触发的AfterSessionComplete事件。你需要在Program.cs里添加阻塞逻辑,比如:static void Main(string[] args) { // 初始化Fiddler和订阅事件的代码 // ... // 让主线程保持运行,等待事件触发 Console.WriteLine("Press any key to exit..."); Console.ReadLine(); // 退出时记得关闭Fiddler FiddlerApplication.Shutdown(); }排查自定义AfterSessionComplete事件的订阅逻辑
如果你自己封装了事件,要确认:- 事件的发布者实例是否正确初始化,没有被提前回收
- 事件处理方法是否确实绑定到了事件上(可以在订阅代码处加断点,确认执行到了订阅步骤)
- 事件的触发时机是否正确,是不是在会话完成的节点真正调用了
OnAfterSessionComplete之类的触发方法
通过日志定位问题
在关键节点添加日志输出,比如Fiddler启动时、事件订阅时、会话开始时,用FiddlerApplication.Log.LogString()或者普通的Console.WriteLine(),看看程序的执行流程是不是符合预期,有没有哪里提前退出或者报错。
内容的提问来源于stack exchange,提问作者Talha Shafique
相关产品推荐
相关产品推荐

