2012-03-30 95 views
6

客户端页面使用javascript将多部分表单数据(文件)发布到我的ASP.NET网站(ashx处理程序)。在ASP.NET应用程序中处理大型并发HTTP POST

用户选择几个文件并开始并发上传。当文件大小为150MB +时,这会在ASP.NET服务器端产生几个并发的POST处理程序。

我有会话控制实施,以及验证码功能,以确切知道它是不是一个僵尸淹水我的服务器。

但问题是与初始上传开始。

每次处理程序是用于处理POST,它会检查会议(我的自定义的会话,每个用户页面的一个)的一个ID,并将该Request.ContentLength大小的文件每个会话POST版的总大小。这些数据被保存到XML中。

但是,由于多个初始帖子同时发生,因此XML记录器会记录字节“扼流圈”的总和,并在每个会话中为所有初始的POST报告0个字节,因为它们同时进入。

我在persister对象(即XML写入)上实现了lock,但现在直到一个POST完全处理完毕,其他人才能继续。

此外,即使我对于“上传限制后”出现的请求没有做任何处理,他们仍然需要时间将数据上传到服务器。

所以我的问题是:

什么是处理多个并发POST上传了正确的模式?

在ASP.NET处理程序代码中过滤请求后,是否立即删除POST,并保存客户端上传数据到IIS的工作?

更新:当lock仅适用于XML写入/最大会话长度计算时,我仍然具有并发性,这很好。现在我只需要弄清楚如何从ashx处理程序代码立即删除会话。

+0

是否所有的http请求写入同一个文件?听起来很糟糕的设计。您可能需要考虑使用某些消息队列服务来处理此问题。将数据保存到数据库中也是可取的。 – deostroll 2012-04-05 08:56:53

+0

这种情况特别是在同一个会话中(这意味着在同一个文件夹中)两个相同名称的文件正被保存到。至于数据库 - 这是一个好主意,但HttpPostedFile有一个SaveAs方法,它接受文件系统中的路径。我还没有看过如何将发布的文件序列化到使用ASP.NET的数据库。 – 2012-04-05 11:57:52

回答