我们使用
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
我们还连接到CatchAllHandlers以确保它不被调用:
m_appHost.CatchAllHandlers.Insert(0, action)
我们使用以下属性在AppHost Ctor中注册路由:
typeof(HelloRequestDTO).AddAttributes(new RouteAttribute("/hello/{Name}", "GET"));
知道什么可能导致RawHttpHandler之后和PreRequestFilters之前的延迟?
ServiceStack版本是4.0.50。
答案 0 :(得分:1)
时间测量是错误的。
(DateTime.Now - lastDateTime).TotalMilliseconds
返回50到1000毫秒之间的随机值。
将System.Diagnostics.Stopwatch与
一起使用watch.ElapsedMilliseconds - lastMillisecondTime
在
之间产生预期值为1 - 5毫秒的持续时间HostContext.RawHttpHandlers
和
m_appHost.PreRequestFilters
我不认为DateTime的不精确程度如此之高。我永远不会再用它来进行毫秒计时。