ASP.NET会话变量 - 由文件上载编写 - 由XMLHttpRequest读取到另一个页面

时间:2009-11-08 04:02:48

标签: multithreading asp.net-3.5 xmlhttprequest

我正在尝试实施进度条来监控文件上传。该文件在iframe中上传,服务器端C#代码后面实现了一个缓冲区来以块的形式上传文件。它使用while循环来执行此操作,并且使用ASP.NET 3.5上传性能似乎很好,我真的不想使用第三方控件或复杂的上载方案。每次处理经过while循环时,它都会使用已处理的字节数和总文件大小更新会话变量。

在客户端,实现iframe上传表单提交的按钮也会启动一个Javascript setInterval(...)到一个函数,它使用XMLHttpRequest到另一个asp.net页面,其唯一的功能是读取那些会话变量和响应把它们写出来。这些应该返回到回调函数并用于更新进度条。

从概念上讲,这是有效的,流程是可行的。我知道这一点,在我的上传处理程序中放置一个断点来停止上传并在'ping'页面中放置另一个断点。我可以在调试器中来回查看正在设置和读取的会话变量。

不幸的是,如果没有断点,这在现实中是行不通的。 ping页面将熄灭而不返回。这种情况一直发生,直到上传完成,此时它将很乐意找到最终结果。

由于这是两个单独的页面请求,我假设我所拥有的是两个独立的线程,两者都试图使用相同的会话变量。由于这些是由IIS生成的,因此我没有这些线程的句柄。上传过程可能使用会话变量太多,ping页面无法获取它。此外,我有系统锁定浏览器和IIS。我曾尝试阅读有关线程同步的内容,但我不太了解它,以便在我没有句柄的线程之间实现它。

有人能够向我展示一些关于如何做到这一点的C#代码吗?我可以找到示例代码,但它们都创建了两个线程,因此具有句柄。我可以在其中一个页面中获取当前线程,但页面无法访问彼此的线程。

谢谢!

2 个答案:

答案 0 :(得分:0)

听起来你正在遇到会话并发冲突。一次只能有一个请求。 http://blogs.msdn.com/b/webtopics/archive/2009/01/30/why-can-t-i-execute-two-requests-from-the-same-session-simultaneously-for-an-asp-net-application.aspx

听起来您需要使用非会话comm方法传输此数据。

答案 1 :(得分:0)