将响应发送到IHttpModule中的客户端后,我是否可以拦截

时间:2012-03-06 01:02:03

标签: asp.net .net-4.0 asp.net-4.0 ihttpmodule

我有一个自定义的IHttpModule用于记录所有HTTP请求和响应,这目前工作得非常好,但我很乐意扩展它,以便我可以确定响应实际需要多长时间。

响应记录在HttpApplication.EndRequest事件中,但此事件在请求实际发送到Web客户端之前触发。虽然这允许我确定服务器处理响应所花费的时间,但我也希望能够计算客户端接收响应所花费的时间。

是否有事件或其他机制允许我在客户端收到回复后拦截?

3 个答案:

答案 0 :(得分:1)

因此需要客户端代码。但并不完全清楚你想要衡量的是什么。从最小到最大,时间可能是

  1. 服务器应用程序内部的时间 - 通过您已有的代码进行测量。
    • 您的代码可以在开始时使用“Now()”或使用HTTP对象设置 start 。对网站的第一次调用会看到这些开始时间之间存在很大差异,否则它们应该几乎相同。
  2. 服务器网站上的时间 - 我相信这已经被IIS等大多数托管服务所测量。
  3. 服务器机器 - 我相信这就是“mo”所指的。您必须在服务器计算机上进行某种外部监视,ala WireShark。
  4. 客户端计算机 - 再次,您必须在客户端计算机上进行某种外部监视。这将是最难获得的,但我认为这正是你要求的。
  5. 客户端应用程序 - 这是您可以使用javascript测量的内容。
  6. 除非这是“第一次通话”(请参阅​​Slow first page load on asp.net siteASP.NET application on IIS7 - very slow startup after iisreset),否则我相信所有这些时间都非常接近,您可以使用“足够好”的方法。

    如果你必须衡量这个电话的客户时间,那么你就会陷入困境。但是如果您只想要更好的数字,只需继续使用您已有的数据来衡量1.(申请时间),并确保同时衡量请求和响应的大小。

    然后通过在各种目标客户端计算机上进行测试,设置一个用于调整该时间的基线。

    • 衡量从客户端到服务器的ping时间
    • 测量中等​​大小内容的传输时间 - 上传和下载
    • Finagle数字以获得平均调整

    你应该得到一个类似的公式:

    [AdjustedTime] = [PingTime] + [ServerTime]
    + ([UploadSpeed] * [RequestSize])
    + ([DownloadSpeed] * [ResponseSize]);
    

    这将是预期的客户响应时间。

答案 1 :(得分:0)

是的,你可以处理HttpApplication.EndRequest

答案 2 :(得分:0)

另一种方法可能是挂钩(例如:将服务编写响应时间的Windows服务)到您的网络服务器(IIS)并追踪这些事件。如果您想分析时间,客户需要获取您的内容。

但我认为,iis已经能够做到这一点。

它取决于一点点,你想要什么。