0

我们有一个依赖 HttpModule 和 HttpHandlers 的性能测量模块,其工作方式如下:

  1. 请求进入服务器以获取页面。
  2. HttpModule_Begin 在 cookie 中写入开始时间。
  3. HttpModule_End 在 cookie 中写入结束时间。
  4. 在客户端,页面加载完成后,通过 HttpHandler_ProcessRequest 处理的 AJAX 触发一个特殊请求
  5. 在 HttpHandler_ProcessRequest 中,从之前的 HttpModule_End(存储在 cookie 中)写入的结束时间中减去 DateTime.Now 并将其存储在数据库中。我忘了提一件事:所有数据都是通过 cookie 共享的,所以 HttpHandler 只是从 cookie 中提取数据而没有任何会话 id 等……所有参与者都在同一个时区。

此过程在大多数情况下都可以正常工作,但有些情况会报告网络时间超过一个小时!这表明在写入结束时间和触发 AJAX 请求之间经过了非常长的时间,或者从触发 AJAX 请求到它到达应用服务器的时间之间经过了很长的时间。我试图弄清楚是什么导致了这个问题。为什么操作不只是超时?

4

2 回答 2

1

扩展您的故障排除:将值附加到 IIS 日志 ( HttpContext.Current.Response.AppendToLog(string) )。

IIS 日志将显示您的条目,您可以确定实际记录这些请求的时间。您可以附加任何您想要的内容,它会显示在日志的查询字段中(假设您使用的是 W3C 格式。)

如果您遇到请求延迟,如证据所示,您可以验证它。这将为您提供 IIS 日志作为与 cookie 中记录值的比较源。

于 2009-02-26T20:05:46.770 回答
0

您是否包含一些唯一 ID,允许 AJAX 请求处理程序确定用于计算的结束时间?如果没有,可能已经在客户端上呈现了足够多的页面,AJAX 请求实际上是在结束时间被写入数据库之前到达的,并且它使用了错误的结束时间。

于 2009-02-26T14:21:38.080 回答