在ASP.NET应用程序中处理大型并发HTTP POST

Max*_*lov 6 asp.net iis concurrency file-upload http-post

客户端页面使用javascript将多部分表单数据(文件)发布到我的ASP.NET站点(ashx处理程序).

用户选择多个文件并开始并发上传.当文件类似于150MB +时,这将生成ASP.NET服务器端的多个并发POST处理程序.

我实现了会话控制,以及验证码功能,以确切知道它是不是泛滥我的服务器的机器人.

但问题是初始上传开始.

每次处理程序要处理a时POST,它都会检查会话的ID(我的自定义会话,每个用户页面一个),并将Request.ContentLength大小添加到POST每个会话编辑的文件总大小.此数据将保存到XML.

但由于几个初始帖子同时发生,一个XML编写器记录字节总和"chokes"并报告所有初始POSTs的每个会话0字节,因为它们同时进入.

我已经实现lock了我的persister对象(它执行XML编写),但现在直到一个POST完全处理,其他人不能继续.

即使我对"上传限制之后"的请求没有做任何事情,他们仍然需要时间将数据上传到服务器.

所以我的问题是:

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

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

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

Hal*_*yon 1

您的 ashx 处理程序是否编写为异步执行?如果没有,这是一篇关于实现异步 ashx 处理程序的好文章:

http://msdn.microsoft.com/en-us/magazine/cc163463.aspx