Session设置不当导致API变成单线程问题的解决
起因:
最近开发一个项目,有个接口很慢(数据库的问题),然后在执行期间,随手去点了其他功能(调用其他接口),发现不响应了。等那个很慢的接口返回结果了,这个功能才立马返回结果。 这明显是一个问题啊!
研究:
一开始不知道是什么地方出了问题,首先猜测是数据库问题(实力甩锅)。但是嘛,问题还是要研究的。 于是打断点,记日志。 探究了一会发现并不是数据库的问题,是我们这边程序被卡主了。
在API层我们能立即接收到所有的访问请求,但是没执行,感觉问题很奇怪啊。
判断依据代码(在Global.asax中记录):
public override void Init()
{
//PostAuthenticateRequest += WebApiApplication_PostAuthenticateRequest;
this.BeginRequest += WebApiApplication_BeginRequest;
this.EndRequest += WebApiApplication_EndRequest;
base.Init();
} private void WebApiApplication_EndRequest(object sender, EventArgs e)
{
HttpApplication obj = (HttpApplication)sender;
Logger.Info("End HTTP{0} {1} {2}", obj.Request.HttpMethod, obj.Request.Url, Thread.CurrentThread.ManagedThreadId);
} private void WebApiApplication_BeginRequest(object sender, EventArgs e)
{
HttpApplication obj = (HttpApplication)sender;
Logger.Info("Start HTTP{0} {1} {2}", obj.Request.HttpMethod, obj.Request.Url, Thread.CurrentThread.ManagedThreadId);
}
解决:
研究了还是有那么久,最后在群组了问了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!
Session设置不当导致API变成单线程问题的解决的更多相关文章
- Windows分页文件设置不当导致SQL Server服务被终止
Windows分页文件设置不当导致SQL Server服务被终止 文章说明 在正式开始验证和测试之前,先介绍Windows分页文件和SQL Server的动态内存管理.下面测试将分为两种测试场景:场景 ...
- 一次由于 MTU 设置不当导致的网络访问超时
转自:http://weibo.com/ttarticle/p/show?id=2309404140904511340923 API 服务正常,但是调用总是超时.api端日志显示,响应速度很快. ...
- 避免因为Arcgis Server服务设置不当导致Oracle Process溢出的方法
我之前写过一篇文章<arcsoc进程无限增长导致oracle processes溢出>(见链接:https://www.cnblogs.com/6yuhang/p/9379086.html ...
- 备忘:有MTU值设置不当导致的部分网站无法访问问题
如题,有时候突然weibo.com,webQQ等网站网络连接超时,怎么找也没得原因,今天管理电信的光猫,发现设置的MTU的1400,突然想起之前电脑和路由器上设置的MTU是1500,感觉可能是这个问题 ...
- 由于MTU设置不当导致的访问超时
现象 工作中遇到一件怪事:搭建好服务器后(VPN服务器,创建了虚拟网卡),服务器和客户端之间响应正常且很稳定,客户端也能正常通过服务器访问外网.但是访问个别网站时可以打开文字,但是部分图片打不开(也不 ...
- JIRA应用的内存参数设置不当+容器没有对资源进行限制导致服务挂掉的例子
背景: 应用的部署结构是这样的:使用rancher管理的Docker集群,有三台物理主机,二十多个Docker容器, 提供的功能是问题跟踪(JIRA),文档管理(Confluence),代码托管(sv ...
- WPF--Dispatcher.BeginInvoke()方法使用不当导致UI界面卡死的原因分析
原文地址: http://www.tuicool.com/articles/F7reem http://blog.csdn.net/yl2isoft/article/details/11711833 ...
- SELinux配置不当导致vsftpd系统用户不能登陆
1.测试是否是SELinux配置不当导致的: setenforce 0 再次登陆ftp,正常,说明是SELinux配置不当导致.还原配置 setenforce 1 2.查看配置: getsebool ...
- ActiveMQ中Session设置的相关理解
名词解释: P:生产者 C:消费者 服务端:P 或者 ActiveMQ服务 客户端:ActiveMQ服务 或者 C 客户端成功接收一条消息的标志是这条消息被签收.成功接收一条消息一般包括如下三个阶段: ...
随机推荐
- XE5 Android 开发数据访问手机端 解决乱码的办法
经过测试,将sqlserver里的字段由varchar 或者char 改为 nvarchar 或者nchar 然后在手机端的clientdataset 增加字段的时候数据类型选择widestrin ...
- Markdown Test
P1 1.1 interview 1.2 invoker show 1.3 Wtf? P2 for example this is a story int main() { printf(" ...
- codeforces 676C C. Vasya and String(二分)
题目链接: C. Vasya and String time limit per test 1 second memory limit per test 256 megabytes input sta ...
- MySQL分区表的使用
MySQL使用分区表的好处: 1,可以把一些归类的数据放在一个分区中,可以减少服务器检查数据的数量加快查询. 2,方便维护,通过删除分区来删除老的数据. 3,分区数据可以被分布到不同的物理位置,可以做 ...
- C#this关键字用法
用法一 this关键字的作用是解决当传入参数的名称和数据字段的名称,类型完全相同时产生的作用于歧义,一般情况下我们应该避免产生重名的习惯 先来演示下: class Airplane { public ...
- 【Cocos2d入门教程四】Cocos2d-x菜单篇
游戏世界多姿多彩,无论多靓丽的游戏,多耐玩的游戏,在与游戏用户交互上的往往是菜单. 上一章我们已经大概了解了导演.节点.层.精灵.这一章以菜单为主题. 菜单(Menu)包含以下内容: 1.精灵菜单项( ...
- Part 99 Lambda expression in c#
class Program { static void Main(string[] args) { List<Person> persons = new List<Person> ...
- DWZ LookUp Suggest 教程
单个查找带回 jsp 代码 lookup.jsp <%@ page language="java" contentType="text/html; charset= ...
- 数据校验validator 与 DWZ
在做系统时经常会用到数据校验,数据校验可以自己写,也可以用现在成的,现在记录下两种类库使用方法, <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 ...
- 2012的数据库 select @@version 都是说版本为2008 R2
如图 我使用的是sqlserver2012登录的,select @@version 查询出来的却是2008 ,而且附加不了2012的数据库. 在网上搜到解决方法:1确认是否安装了2012(废话没安装是 ...