最近开发一个项目,有个接口很慢(数据库的问题),而后在执行期间,随手去点了其余功能(调用其余接口),发现不响应了。等那个很慢的接口返回结果了,这个功能才立马返回结果。 这明显是一个问题啊!html
一开始不知道是什么地方出了问题,首先猜想是数据库问题(实力甩锅)。可是嘛,问题仍是要研究的。 因而打断点,记日志。 探究了一会发现并非数据库的问题,是咱们这边程序被卡主了。数据库
在API层咱们能当即接收到全部的访问请求,可是没执行,感受问题很奇怪啊。ide
判断依据代码(在Global.asax中记录):post
1 public override void Init() 2 { 3 //PostAuthenticateRequest += WebApiApplication_PostAuthenticateRequest; 4 this.BeginRequest += WebApiApplication_BeginRequest; 5 this.EndRequest += WebApiApplication_EndRequest; 6 base.Init(); 7 } 8 9 private void WebApiApplication_EndRequest(object sender, EventArgs e) 10 { 11 HttpApplication obj = (HttpApplication)sender; 12 Logger.Info("End HTTP{0} {1} {2}", obj.Request.HttpMethod, obj.Request.Url, Thread.CurrentThread.ManagedThreadId); 13 } 14 15 private void WebApiApplication_BeginRequest(object sender, EventArgs e) 16 { 17 HttpApplication obj = (HttpApplication)sender; 18 Logger.Info("Start HTTP{0} {1} {2}", obj.Request.HttpMethod, obj.Request.Url, Thread.CurrentThread.ManagedThreadId); 19 }
研究了仍是有那么久,最后在群组了问了iFish,而后他说你看看是否是Sessin会话的问题。顺着这个关键字一路搜下去,找到了问题的所在。 的确是Session会话的问题。相关文章:会话状态Session 这里面介绍的很详细!ui
解决代码:this
private void WebApiApplication_PostAuthenticateRequest(object sender, System.EventArgs e) { HttpApplication obj = (HttpApplication)sender; HttpContext.Current.SetSessionStateBehavior(obj.Request.RawUrl.ToLower().Contains("login") ? SessionStateBehavior.Required : SessionStateBehavior.ReadOnly); }
知识+1!url