PreRequestFilters之前的ServiceStack请求处理延迟

时间:2016-01-08 12:34:08

标签: c# asp.net request servicestack delay

我们使用

HostContext.RawHttpHandlers.Add(action)

开始时间测量和

m_appHost.PreRequestFilters.Insert(0, action) // we want to be the first filter executed

停止时间测量。我们按顺序向服务器发送请求(使用IIS Express开发服务器在localhost上运行)并观察这两个操作之间的时间。有时它只有几毫秒,但通常会达到几百毫秒。轻量级GET请求也会发生这种情况。

根据https://github.com/ServiceStack/ServiceStack/wiki/Order-of-Operations

  1. HostContext.RawHttpHandlers在其他任何事情之前执行,即返回任何ASP.NET IHttpHandler完全绕过ServiceStack并改为处理您的自定义IHttpHandler。
  2. 如果请求与任何现有路由不匹配,它将搜索IAppHost.CatchAllHandlers以进行匹配
  3. 在反序列化请求DTO之前执行IAppHost.PreRequestFilters
  4. 我们还连接到CatchAllHandlers以确保它不被调用:

    m_appHost.CatchAllHandlers.Insert(0, action)
    

    我们使用以下属性在AppHost Ctor中注册路由:

    typeof(HelloRequestDTO).AddAttributes(new RouteAttribute("/hello/{Name}", "GET"));
    

    知道什么可能导致RawHttpHandler之后和PreRequestFilters之前的延迟?

    ServiceStack版本是4.0.50。

1 个答案:

答案 0 :(得分:1)

时间测量是错误的。

(DateTime.Now - lastDateTime).TotalMilliseconds

返回50到1000毫秒之间的随机值。

将System.Diagnostics.Stopwatch与

一起使用
watch.ElapsedMilliseconds - lastMillisecondTime

之间产生预期值为1 - 5毫秒的持续时间
HostContext.RawHttpHandlers

m_appHost.PreRequestFilters

我不认为DateTime的不精确程度如此之高。我永远不会再用它来进行毫秒计时。