我们能否围绕长时间运行的外部调用保存和加载ASP.NET InProc会话(从而释放锁)

我们能否围绕长时间运行的外部调用保存和加载ASP.NET InProc会话(从而释放锁),asp.net,Asp.net,在ASP.NET中,当在同一网页上有两个AJAX请求调用两个控制器操作时,如果它们使用会话,则其中一个将锁定另一个 您可以获得对会话的只读访问权限,这会有所帮助,但如果您想写入会话,则不能 您可以重写会话类,例如。 ,但出于同样的原因,这并没有真正的帮助 在我的例子中,控制器操作调用长时间运行的外部服务器调用。理想情况下,当这种情况发生时,会话将被释放并保存回内存,然后当调用完成时,会话将被读回,如果另一个调用仍在进行,则可能会被阻止 注意:外部服务器调用是否以异步方式调用没有区别 有没有办法做

在ASP.NET中,当在同一网页上有两个AJAX请求调用两个控制器操作时,如果它们使用会话,则其中一个将锁定另一个

您可以获得对会话的只读访问权限,这会有所帮助,但如果您想写入会话,则不能

您可以重写会话类,例如。 ,但出于同样的原因,这并没有真正的帮助

在我的例子中,控制器操作调用长时间运行的外部服务器调用。理想情况下,当这种情况发生时,会话将被释放并保存回内存,然后当调用完成时,会话将被读回,如果另一个调用仍在进行,则可能会被阻止

注意:外部服务器调用是否以异步方式调用没有区别


有没有办法做到这一点?可能通过重写某些内部类来实现?

在您的情况下,“长时间运行”外部调用需要多长时间?您可以使用初始的
IHttpHandler
,它只使用
IReadOnlySessionState
,然后在获得外部响应后(需要对会话的写访问权)使用
服务器。执行
传输
加载使用
iRequestSessionState
的不同
IHttpHandler
?这将取决于HTTP上下文(请求/响应)生命周期的重新启动…一个极端调用是30秒,通常是3秒左右。在您的情况下,“长时间运行”的外部调用有多长?您可以使用一个初始的
IHttpHandler
,它只使用
IReadOnlySessionState
,然后,在您完成获取外部响应(并且需要对会话的写访问)后,使用
服务器。执行
传输
以加载使用
iRequestSessionState
的不同
IHttpHandler
?这将取决于HTTP上下文(请求/响应)生命周期的重新启动…一个极端的调用是30秒,通常是3秒左右。