【问题标题】:ASP.net: Concurrent file upload Fails after N number of large uploadsASP.net:N次大上传后并发文件上传失败
【发布时间】:2017-08-21 13:25:03
【问题描述】:

我正在开发一个 asp.net(Webforms、asp.net 2.0、Framework 3.5)应用程序。它是在 IIS 7.0 上运行的 32 位应用程序,操作系统为 Windows 2008 R2 SP1

我遇到了上传大文件的问题。大于 20 MB 左右的文件。该应用程序可以上传大文件,但是注意到在 N 次上传后,下一组上传一直失败,直到 IIS 重新启动。

应用程序支持并发文件上传。值得注意的是,单个大文件上传始终有效。只有当我们开始上传超过 1 个文件时,其中一个上传才会卡住。

我尝试查看上传已发布文件数据的临时文件夹,并注意到当问题发生时,失败文件的上传永远不会从服务器的角度开始,因为它永远不会生成任何临时文件,几秒钟后,请求失败。

当事情失败时, CPU一切正常 W3wp 代表 2 GB 内存使用量(相对于总 4 GB RAM) W3wp 没有显示崩溃,因为应用程序的其他页面仍然可以正常工作

我尝试使用wireshark 查看网络流量,但它也显示ERR_connection_RESET。除此之外,我没有任何线索。

我怀疑以下事情,但不知道如何得出结论或解决。 1)要开始并发上传,服务器需要从客户端响应数据泵送率,当它无法匹配时,它必须在内部失败。这可能是由于服务器无法处理并发请求。 2) 频繁的大上传会增加应用程序的内存占用,以至于它无法处理并发上传,因为要以分块方式将文件转储到临时位置,仍然需要 RAM

这是我的网络配置设置

<httpRuntime maxRequestLength="2097151" executionTimeout="10800" enableVersionHeader="false"/>

从实施的角度来看, 1)我们有用Java脚本编写的客户端实现,它创建FormData并将XHR发送到服务器 2)服务器有一个方法,当完整的文件被复制到服务器的临时目录时被调用,我们使用Request.Files集合提取文件数据,然后进一步处理

发生问题时,会调用服务器方法,但 Request.Files 为空。

如果有人对此有很好的见解,请告诉我,这可以指导我找到根本原因并进行修复。

更新: 客户端代码表示:

 //Set HTTP headers
_http.setRequestHeader("x-uploadmethod", "formdata");
_http.setRequestHeader("x-filename", "Name of file");

// Prepare form data
var data = new FormData();
data.append("Name of file", File contents);

//Sends XHR request
_http.send(data);

服务器端代码表示:

HttpFileCollection files = Request.Files;
int Id = objUpload.UploadMyAssets(files[0]);

UploadMyAssets 中的逻辑是将 files[0] 作为 HttpPostedFile,然后继续执行特定于应用程序的逻辑。

谢谢

【问题讨论】:

  • 你能展示你的代码完成和处理上传
  • 添加了代码表示
  • 我会尽快看看,看看我能找到什么
  • 这些代码块所在的苍蝇类型是什么,以便我可以尝试重现问题
  • 另外,我认为这也是一个 WebForms 项目是否正确?

标签: c# asp.net file-upload concurrency


【解决方案1】:

我有同样的问题。原来 ASP.NET 默认会话管理器正在阻塞通过 https (HTTP/2) 的异步流。没有通过http(非ssl)发生。 通过对控制器类使用 SessionStateBehavior.Readonly 解决了这个问题。与这篇文章相关: ASP.Net Asynchronous HTTP File Upload Handler

【讨论】:

    猜你喜欢
    • 2012-05-31
    • 1970-01-01
    • 2011-05-04
    • 2012-04-12
    • 2019-01-23
    • 2020-01-19
    • 2018-05-13
    • 1970-01-01
    • 2012-03-06
    相关资源
    最近更新 更多