最近開發一個項目,有個接口很慢(數據庫的問題),而後在執行期間,隨手去點了其餘功能(調用其餘接口),發現不響應了。等那個很慢的接口返回結果了,這個功能才立馬返回結果。 這明顯是一個問題啊!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