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