我敢肯定,我已经踏上了许多以前的步骤,但似乎无法解决这个问题。目标是为具有实时进度条(可能用于多个文件)的 ASP.NET 2.0 站点创建文件上传页面。
我已经实现并测试了解决方案的大部分内容。但愚蠢的是,我似乎无法让它全部一起工作。
构建了一个自定义 HttpModule,用于处理相关请求的 PreRequestHandlerExecute 事件(最初使用 BeginRequest——但我想访问 Session),并使用 HttpWorkerRequest 对象以块的形式解析传入的表单发布数据。实时进度保存到 Session。
在同一应用程序中构建 Web 服务,该应用程序提供 ScriptMethod 将 JSON 返回到 jQuery 请求,其中包含从 Session 中提取的进度信息。对此进行了测试,并且可以正常工作。
我的问题是我无法在 (1) 正在进行时对 (2) 中的 ScriptMethod 进行 jQuery轮询。 jQuery 调用似乎只是在某个地方排队,一旦上传完全发布,它们都会突然返回“100%”。所以异步部分不起作用。
我尝试过的事情:
- 使用 .ajaxForm()(jQuery Forms 插件)提交文件上传帖子。
- 使用 IFRAME 进行嵌套的各种场景。
- 当我从第一页提交上传时,有一个单独的页面(在单独的浏览器选项卡中)运行轮询 jQuery。轮询仍然停止并排队,直到第一页完成。
我在网上看到了其他非常相似的解决方案,其他人声称对他们有用,所以它一定是可能的,我只是缺少一些基本的东西。
更新:
问题已解决,现在一切正常。请参阅下面关于 SessionState 锁定的我自己的答案。