经典的ASP并行Ajax调用由IIS处理(会话锁?)

时间:2012-10-25 20:08:44

标签: jquery iis asp-classic synchronization

我正在维护一个在IIS 7.0上托管的经典ASP应用程序。有一段时间我发现连续3个Ajax调用应该并行发生时遇到性能问题,但看起来IIS正在串行执行它们。这是一个问题,因为第一个Ajax调用是一个耗时的调用,并且第二个和第三个查询没有理由在它之前返回。

我认为问题在于,在调用期间,会话对象被创建,并且我们正在对每个调用中的会话进行修改。我相信IIS因此而序列化了Ajax调用。

我的问题是,有没有办法可以通过会话将其关闭,但仍会保持会话“开启”,这样我们仍然可以从中读取?我找到了可以使用的EnableSessionState属性,但它完全禁用了会话,我不想发生这种情况。

我知道禁用锁可能不是最好的解决方案,但是Ajax调用之间的变量应该是最小的。关于如何解决这个问题的任何建议都非常感谢。

MJ

2 个答案:

答案 0 :(得分:1)

据我所知,没有办法并行使用会话;它们按照定义是顺序的,因为它们在相同的“公寓”(STA)中运行。

如果可能,您可以将值存储在应用程序对象中,因为它在MTA(多线程)中运行。您可以使用MSXML2.FreeThreadedDomDocument来存储每个用户的值(例如,使用存储在cookie中的唯一键或类似的东西来获取用户数据)。

答案 1 :(得分:0)

如果您不需要对任何会话变量进行更改,则可以执行以下操作:

使用以下内容创建一个关闭该页面的会话状态的新页面:

<%@ EnableSessionState=False %>

将会话中所需的数据输出到主页面,然后在jQuery调用中传递数据。