上篇示範在單一請求中執行 IronPython 片段檢查即時狀態。生產環境往往需要「持續一段時間」採樣請求細節(如每秒吞吐、延遲分佈、特定條件下的變數值)。利用 HttpModule 掛載管線事件是天然切入點。
traceRequest(ctx)、endTraceRequests()、waitTime。BeginRequest 事件掛上委派,呼叫 traceRequest 記錄每個請求上下文。Thread.Sleep(waitTime) 讓主執行緒等待採樣窗口。endTraceRequests 收尾,將累積輸出回前端。private void TraceRequests(Action<HttpContext> traceRequest, int waitTime, Action endTraceRequests)
{
EventHandler handler = (sender, e) =>
{
try { traceRequest((sender as HttpApplication).Context); } catch { }
};
this.Context.ApplicationInstance.BeginRequest += handler;
Thread.Sleep(waitTime);
this.Context.ApplicationInstance.BeginRequest -= handler;
if (endTraceRequests != null) endTraceRequests();
}
此法無需修改 web.config、重啟應用程式,極適合生產環境即時診斷。注意:Thread.Sleep 會阻塞該要求執行緒,採樣期間該執行緒無法服務其他請求,建議控制在可接受範圍內。