Session設置不當致使API變成單線程問題的解決 會話狀態Session

原由:

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

相關文章
相關標籤/搜索