2011-09-09 58 views
8

我们有一个页面,允许用户一次最多上传5个文件的Web门户。该页面只有5个标准的ASP.NET FileUpload控件。ASP.NET文件上传停止所有其他请求在网站

的问题是,我们看到,当一个用户要上传的文件它所带来的网站停止所有其他活动。在上传过程中的1-2分钟内,我们看到请求开始排队并请求吞吐量下降到零。只要文件完成上传,一切都会恢复。 (我们使用New Relic的向我们展示了这是怎么回事)

我们针对的不是一个经常使用的功能,以及正在上传的文件并不大。但是,我们已经看到每个大约70kb的4个文件的上传导致了这一点。

一些调查使我this blog post。不幸的是,他们碰巧销售的产品需要Server 2008和IIS7,客户端有2003和IIS6。此外,它似乎并不是4个小小的上传应该有这种影响。

因此,已经没有其他人遇到这种情况还是知道的东西,可能为了使这样的小规模这个问题已经做错了?也许有不正确的应用程序池或web.config设置,我们应该看看会抑制吞吐量?

+0

它是否仅在同一台PC和浏览器上进行阻止?在此期间,该网站是否仍然在同一台PC上的其他PC或其他浏览器上进行响应?换句话说,你是否触及浏览器连接每服务器限制? –

+1

有没有机会让你的App Pool的线程最大化? – joelmdev

+0

Mufasa - 它阻止所有连接到站点的所有其他PC和浏览器,而不仅仅是一个。 jm2 - 也许吧。有没有一个很好的方法来找出答案? – Ryan

回答

1

尝试使用委托异步上传。它可能有帮助。

0

你为什么不尝试把你的上传控件在更新面板?我认为这将分开处理上传请求。 让我知道这是否工作。

0

当你说网站上的所有其他活动停止时,事实证明只有在正在上传的客户端上(编辑:我看到你在其他评论中指出),以及如果您不需要在上载过程中将数据写入Session,解决方案将非常简单:更改接受上载的页面/处理程序/ WebMethod,以使其无法写入Session,如下所示。

  • 对于一个页面,添加EnableSessionState="false"EnableSessionState="ReadOnly"@ Page指令。
  • 对于通用处理程序,请从类声明中删除 IRequiresSessionState,或将其替换为IReadOnlySessionState
  • 对于一个WebMethod,使用EnableSession property of the WebMethod attribute[System.Web.Services.WebMethod(EnableSession=false)]
0

,如果你用asp文件上传服务器控件添加以下代码到web.config中

<httpRuntime 
executionTimeout="110" 
maxRequestLength="4096" 
requestLengthDiskThreshold="80" 
useFullyQualifiedRedirectUrl="false" 
minFreeThreads="8" 
minLocalRequestFreeThreads="4" 
appRequestQueueLimit="5000" 
enableKernelOutputCache="true" 
enableVersionHeader="true" 
requireRootedSaveAsPath="true" 
enable="true" 
shutdownTimeout="90" 
delayNotificationTimeout="5" 
waitChangeNotification="0" 
maxWaitChangeNotification="0" 
enableHeaderChecking="true" 
sendCacheControlHeader="true" 
apartmentThreading="false" />` 

只是改变executionTimeout="110" maxRequestLength="4096"

+1

当前的web.config具有''。这会达到与你的建议类似的结果吗? – Ryan

0
  1. http://www.uploadify.com/
    • 允许您上传单个或多个文件。每个文件将被发送到 - >

- > 2的Web通用处理器 - 在这里你可以查看大小,扩展名,在哪里存储等..

  1. 上传完成后,回复一些msg/do操作。

这种结构与您的网站速度没有任何关系......它就像他在其他页面上传这些文件一样。另外好的想法是,多个文件一个一个地上传。

相关问题