为什么有时在调用Web API方法时会有很长的延迟

时间:2015-08-25 14:47:56

标签: c# azure asp.net-web-api fiddler tcp-ip

详细信息:我正在运行VS. Azure云服务上的WebApi应用程序。我正在开发环境中运行调试(不确定是否重要)。当我执行下面的web方法时,使用fiddler,大多数时候响应非常快 - 大约200ms的完成事务时间。但是,有时响应时间超过1-2秒。我想知道为什么。为了排除故障,我正在使用提琴手诊断结果以及我在响应中提供的自定义标题,该标题为我提供了一些时间信息(X-diagnostics)

问题:鉴于下面的小提琴响应与我的自定义诊断程序并列,并再次给出了我的回复非常快;

  1. 为什么TCP / IP连接超过1000毫秒?
  2. 为什么fiddler的开始请求和方法的输入之间有这样的延迟(我在进入方法后立即开始登录)
  3. 为什么方法退出和fiddler的开始响应之间存在这样的延迟。
  4. 为什么会偶尔发生这种情况
  5. 我能做些什么来阻止它吗?
  6. 网络方法

        [Route("api/devicereports")]
        [Route("api/v0/devicereports")]
        [HttpPost]
        public HttpResponseMessage PostStatusReport([FromBody] object report, bool includeDiagnostics = false)
    

    提琴手回复

    ClientConnected:      07:18:26.917
    ClientBeginRequest:   07:18:26.918
    GotRequestHeaders:    07:18:26.918
    ClientDoneRequest:    07:18:26.918
    Determine Gateway:    0ms
    DNS Lookup:           0ms
    TCP/IP Connect:       1015ms
    HTTPS Handshake:      0ms
    ServerConnected:      07:18:27.933
    FiddlerBeginRequest:  07:18:27.933
    ServerGotRequest:     07:18:27.933
    ServerBeginResponse:  07:18:30.558
    GotResponseHeaders:   07:18:30.558
    ServerDoneResponse:   07:18:30.558
    ClientBeginResponse:  07:18:30.558
    ClientDoneResponse:   07:18:30.558
    
    **Overall Elapsed:  0:00:03.640**
    

    我的自定义诊断

    X-Diagnostics: Start=14:18:29.885 && Finish=14:18:30.025 && Time(ms)=140  && Leave=14:18:30.025
    

    分析

    FIDDLER: RequestBegin;  27.933
    CODE   : Start;         29.885
    CODE   : Finish;        30.025
    FIDDLER: BeginResponse; 30.558
    

1 个答案:

答案 0 :(得分:0)

实际上第一个请求需要更长时间。第一个慢响应与服务程序集的JIT编译有关,并且, IIS应用程序池在不活动30分钟后关闭。

之后,您会更快地得到答复。

你可以做的一些事情:

1-在您的网络应用中始终启用;

由于您使用的是Cloud Service,因此未应用。

1.1 - 禁用空闲超时(通过web.config文件);

以下是您如何以编程方式实现该目标:http://wp.sjkp.dk/windows-azure-websites-and-cloud-services-slow-on-first-request/

2-每隔X分钟呼叫您的webapi以避免空闲超时;

您可以编写一个每X分钟调用一次webapi的辅助角色。

3-以自主模式托管您的webapi(在工作者角色中)

以下是Asp.Net官方网站的链接:http://www.asp.net/web-api/overview/hosting-aspnet-web-api/host-aspnet-web-api-in-an-azure-worker-role