۱۳۸۸/۰۹/۰۳

IIS7 و آپلود فايل‌هاي حجيم


با استفاده از IIS6 ويندوز سرور 2003 و تنظيمات ويژه در web.config يك برنامه ASP.Net، حداكثر مي‌توان يك فايل 2 گيگابايتي را آپلود كرد (جهت مصارف اينترانتي). براي مثال:
<system.web>
<httpRuntime maxRequestLength="2097151" executionTimeout="900" />
</system.web>
2097151 كيلوبايت حداكثر مقداري است كه اينجا مي‌توان تنظيم كرد و بيش از اين با خطاي زير متوقف خواهيم شد:

Parser Error Message: The value for the property 'maxRequestLength' is not valid. The error is: The value must be inside the range 0-2097151.

اين محدوديت در IIS7 برطرف شده است كه تنظيمات آن در وب كانفيگ به صورت زير مي‌باشد:
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="4294967295" />
</requestFiltering>
</security>
</system.webServer>

در اينجا maxAllowedContentLength بر حسب بايت است و نه همانند maxRequestLength برحسب كيلوبايت (كه در IIS7 هيچ تاثيري نخواهد داشت).
البته تنظيمات فوق در اينجا به پايان نمي‌رسند زيرا بر اساس تنظيمات امنيتي IIS7، كاربران مجاز به اعمال تنظيمات شخصي خود نيستند و خطاي زير را دريافت خواهند كرد:
The requested page cannot be accessed because the related configuration data for the page is invalid
و يا

The request filtering module is configured to deny a request that exceeds the request content length

براي اين منظور بايد دستور زير را با دسترسي مديريتي در خط فرمان اجرا نمود:
براي يك برنامه خاص:
%windir%\system32\inetsrv\appcmd set config "Default Web Site/<your app>" -section:requestFiltering -requestLimits.maxAllowedContentLength:4294967295

و يا براي تمام برنامه‌ها:
%windir%\system32\inetsrv\appcmd set config -section:requestFiltering -requestLimits.maxAllowedContentLength:4294967295

و يا فايل زير را يافته:
%windir%\System32\inetsrv\config\applicationHost.config
در آن سطر زير را
<section name="requestFiltering" overrideModeDefault="Deny" />
ويرايش كرده و مقدار overrideModeDefault آن‌را به Allow‌ تنظيم كرد:
<section name="requestFiltering" overrideModeDefault="Allow" />
مقدار پيش فرض maxRequestLength در IIS6 مساوي 4 مگابايت و مقدار پيش فرض maxAllowedContentLength در IIS7 مساوي 28.6MB‌ مي‌باشد. maxAllowedContentLength از نوع UINT32 است يعني حداكثر تا 4 گيگابايت را توسط آن مي‌توان مقدار دهي كرد. maxRequestLength از نوع Int32 است با حداكثر مقدار قابل تنظيم 2 گيگابايت.