IIS 最大工作进程数 大于 1 时,Session 高频丢失

背景介绍

我有一个业务场景 使用 DotNet API 使用 ClientBase 访问WebService时,如果一个实例 clent 同时请求多个 接口,出现排队等待的情况。如果有一个特别慢的接口,那么在这个接口响应之前或者超时之前,后面所有的请求都会等待,最后就会出现同时超时异常的报错。

解决请求排队

WebService是部署在IIS上的,所以可以直接通过修改IIS 的最大工作进程数来解决一个client只处理一个任务的问题。
路径:应用程序池》找到应用》右键》高级设置》最大工作进程数(这里默认为1)
在这里插入图片描述
设置完之后,在第一个接口等待过程中,第二个接口直接进行工作,当前问题解决。
但是我发现,我其他接口在进行请求时,Session数据丢失。而且本期所有的接口的Session全部都丢失了。

解决Session丢失问题

首先Session是存在于进程中的,而修改最大工作进程数,会使每个请求都将启动一个新的工作进程实例,这就造成了每一个新的进程都是没有Session的。
此时可以通过修改 站点的会话状态,来将Session 存储在服务器或者SqlServer数据库中。
这里我使用服务器存储。

使用状态服务器(StateServer)存储Session

在web.config的添加节点

<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" timeout="1200"/>

在这里插入图片描述
这种可以使Session存储在本机状态服务器中。

开启aspnet_state服务

但是状态服务器默认是关闭的,需要打开服务 【ASP.NET State Service】,右键启动。如果需要服务器自启的话,可以右键属性,设置 启动类型 为自动

在这里插入图片描述
在这里插入图片描述

设置注册表(非必要)

如果需要提供给非本机使用可以打开注册表位置
计算机\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\aspnet_state\Parameters
设置参数值。
【AllowRemoteConnection】默认为0,当值为1时,可以被非本机调用(注意防火墙端口状态)
【Port】默认 42424
在这里插入图片描述
以上是我解决本次问题的所有步骤。

本篇图文纯手打,点赞收藏发大财!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值