2

我遇到了一个以前没有的奇怪问题,我想我会在这里询问是否有人有任何建议。

目前,我的应用程序有一个区域可以创建一个新的“录音” (它在新窗口中使用 Flash 模块来录制音频),当录制完成时,用户提交表单并将所有音频数据发布到我的控制器。

此过程的持续时间可能取决于音频的大小,因此窗口将保持打开状态,直到上传完成然后关闭。

问题发生在上传过程中,如果用户上传录音并且在上传时尝试打开一个新窗口(其中填充有“创建录音”视图)并且新窗口内容的加载会停止,直到上传完成了。

如果我在实际上传其中一个之前为创建记录打开多个窗口,则整个过程工作正常,但是如果我开始上传一个然后尝试打开一个新窗口,那么它将“等待”上传操作完成之前填充新窗口内容。

4

1 回答 1

4

我认为您遇到了会话问题。

任何在有活动会话时提供的并且可以修改它的东西(即任何.Net 请求,但不是图像/css/等)都将获得会话对象的排他锁,直到请求完成。其他可以访问会话的请求将被排队,直到锁被释放。

更多信息在这里

可以通过指示某些请求只需要对会话状态进行只读访问来解决问题。有关完整详细信息,请参阅链接 Q 的答案。

这里有一个自定义会话状态模块的实现,可以大大加快速度。它的工作原理是将会话信息缓存在内存中的哈希表中,然后告诉框架会话访问已完成。

请注意,这种方法存在潜在问题,如果 2 个页面几乎同时修改会话,则可能会导致竞争条件,以查看保留哪些修改 - 因此只有在您完全理解其含义时才这样做。

于 2012-10-10T17:03:35.310 回答