我有一个MVC应用程序,可以提供很多不同的功能 功能。其中一些功能需要较长的响应时间,因为与SAP(消息队列)进行通信或在Oracle数据库中执行复杂的SQL指令。
当用户对此应用程序执行任何操作时,其会话将被“锁定”,直到请求终止。即使它打开一个新的浏览器选项卡,服务器也要等待第一个事务完成才能开始为后面的事务提供服务。由于这些操作需要较长的响应时间(在某些情况下为20分钟),因此在第一个请求终止之前,用户无法使用其他模块功能。
我所有的方法都遵循以下相同的结构:
public class ProdutoController : ControleBase
{
[HttpPost]
public JsonResult Pesquisar(ProdutoPesquisa parametros)
{
....
}
}
我最近进行了一项测试,该测试可以对同一个会话ID执行多个请求,并将以下注释添加到我的所有控制器中:
[SessionState(system.web.SessionState.SessionStateBehavior.ReadOnly)]
更改后,服务器不再能够存储用户的会话,这是我用来存储每个用户的权限(按钮,菜单,功能)的设备。这些权限是通过请求自己的API来执行特定的验证而获得的。在评估成本效益时,我认为每个新请求都重做对此API的调用并不有趣,因为每天的请求数量很多(大约一百万)。
还有其他解决方法吗?可以将方法用作“任务”吗?