Session设置不当导致API变成单线程问题的解决

起因:

最近开发一个项目,有个接口很慢(数据库的问题),然后在执行期间,随手去点了其他功能(调用其他接口),发现不响应了。等那个很慢的接口返回结果了,这个功能才立马返回结果。  这明显是一个问题啊!

研究:

一开始不知道是什么地方出了问题,首先猜测是数据库问题(实力甩锅)。但是嘛,问题还是要研究的。  于是打断点,记日志。 探究了一会发现并不是数据库的问题,是我们这边程序被卡主了。

在API层我们能立即接收到所有的访问请求,但是没执行,感觉问题很奇怪啊。

判断依据代码(在Global.asax中记录):

 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 这里面介绍的很详细!

解决代码:

    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!

转载于:https://www.cnblogs.com/SzeCheng/p/5408109.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值