我们有一个门户网站,其中有一个页面,允许用户一次最多上传5个文件。该页面只有5个标准的ASP.NET FileUpload控件。
问题是,我们看到当用户上传文件时,它会使网站上的所有其他活动停止。在上传过程的1-2分钟内,我们看到请求开始排队并请求吞吐量降至零。文件完成上传后,一切都会恢复。 (我们正在使用New Relic向我们展示正在发生的事情)
我们没有处理常用功能,上传的文件也不大。但是,我们已经看到每个上传大约70kb的4个文件会导致这种情况。
有些调查让我this blog post。不幸的是,他们碰巧销售的产品需要Server 2008和IIS7,客户端有2003和IIS6。此外,似乎4个微小的上传应该没有这种影响。
那么,是否还有其他人遇到过这种情况,或者知道为了在如此小的范围内造成这个问题本来可以做错的事情?也许有不正确的应用程序池或web.config设置我们应该关注那会限制吞吐量?
答案 0 :(得分:1)
尝试使用委托进行异步上传。这可能有所帮助。
答案 1 :(得分:0)
为什么不尝试将上传控件放在更新面板中?我认为这将分别处理上传请求。 如果有效,请告诉我。
答案 2 :(得分:0)
如果你说网站上的所有其他活动都停止了,那么结果只会出现在正在进行上传的客户端上(编辑:我看到你在评论中另有说明),如果你不需要在上传过程中将数据写入Session,解决方案很简单:更改接受上传的page / handler / WebMethod,使其无法写入Session,如下所示。
EnableSessionState="false"
或
EnableSessionState="ReadOnly"
指令@ Page
。IRequiresSessionState
,或将其替换为IReadOnlySessionState
。EnableSession
property of the WebMethod
attribute:[System.Web.Services.WebMethod(EnableSession=false)]
答案 3 :(得分:0)
如果使用asp fileupload服务器控件,请将此代码添加到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"
答案 4 :(得分:0)
- &GT; 2. Web通用处理程序 - 在这里你可以检查尺寸,扩展名,存放地点等......
这种结构与您的网站速度无关......就像他将这些文件上传到其他页面一样。同样好的想法是,多个文件逐个上传..