我们的asp.net 2.0应用程序在将响应发送回客户端之前有一个非常长的过程(同步)。我观察到,当我们的应用程序仍在处理第一个请求时,客户端IE8在很长一段时间内等待响应后发送了第二个请求,与初始请求完全相同。
我使用预定义密钥的页面会话在初始请求到达时存储标志,然后在客户端IE等待响应时启动长进程,因此如果第二个请求进入,我们的应用程序将检查会话值。在我们的应用程序设置会话标志并开始处理之后,我使用Fiddler“Abort Session”中止初始请求,立即自动发送第二个请求(与第一个请求相同),但之前设置的会话值似乎不再存在。
有什么想法吗?
答案 0 :(得分:0)
当您正在进行的过程中第二个请求进入时,它是否会覆盖您当前请求的值,因为它只存储一个项目?假设两个请求都在同一个会话中进入。
也许考虑存储一个项目列表,以便您可以将第二个项目添加到您的标记列表中,然后找到之前的任何项目并将其删除。
在开始第二次请求会话之前,可能会杀死会话中当前的请求吗?
我并不是很了解你的问题/解决方案,但希望这会有所帮助。
根据您的评论进行修改:
如果它不再存在,可能是由于你的会话超时并擦除了值,所以第二个将无法访问它。第二个连接是在完全相同的会话下进行的吗?在两种情况下比较会话ID。还要检查你的超时。
您还可以将此信息存储在具有真正有效期限的应用程序缓存中。如果您只需要每个用户一个进程然后存储您的值,请使用密钥作为会话ID的字典,甚至是用户。当第二个请求由同一个用户进入时,无论会话ID如何,您都可以找到它。只需确保您的流程完成后即可清除。