• 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!

  • 相关阅读:
    10个很有用的高级Git命令
    25套用于Web UI设计的免费PSD网页元素模板
    101个MySQL 的调节和优化的提示
    10款最新且超实用的开发框架
    30 个有用的 HTML5 和 CSS3 表单设计
    cetos7最小化安装设置网络启动和更新yum源
    百度地图api开发:根据坐标获得地理描述地址
    防止sql注入的函数addslashes()
    jquery使用ajax提交form表单
    Git常用命令
  • 原文地址:https://www.cnblogs.com/SzeCheng/p/5408109.html
Copyright © 2020-2023  润新知