Загрузить файлы более 2 ГБ в IIS 8 / ASP.NET 4.5? - PullRequest
8 голосов
/ 24 января 2012

Мне нужно загрузить 10 ГБ файлов в IIS одним куском.Насколько я знаю, IIS 7.x / ASP.NET 4.0 не поддерживает загрузку более 2 ГБ (некоторые люди говорят, 4 ГБ).

Исправлено ли это в IIS 8 / ASP.NET 4.5?

1 Ответ

6 голосов
/ 01 августа 2012

Вот как я загружаю ниже 4 ГБ (интересно, как тоже преодолеть этот лимит): Пул приложений - это классический режим .NET 4.0 (почему нет 4.5?).web.config:

<httpRuntime executionTimeout="2400" maxRequestLength="2099999999" />
...
<requestLimits maxAllowedContentLength="4294967290"/>

Согласно этой статье http://msdn.microsoft.com/en-us/library/hh195435%28v=vs.110%29.aspx

public override Stream InputStream
{
    get
    {
        object workerRequest = ((IServiceProvider)HttpContext.Current).GetService(typeof(HttpWorkerRequest));
        bool webDevServer = workerRequest != null &&
                            workerRequest.GetType().FullName == "Microsoft.VisualStudio.WebHost.Request";

        if (request.GetType().Assembly.GetName().Version.Major >= 4 && !webDevServer)
        {
            try // trying to set disableMaxRequestLength true for .NET 4.5
            {
                return (Stream)typeof(HttpRequest).GetMethod("GetBufferlessInputStream", BindingFlags.Public | BindingFlags.Instance, null, new[] { typeof(bool) }, null)
                                        .Invoke(request, new object[] { true });
            }
            catch (NullReferenceException)
            { // .NET 4.0 is not patched by adding method overload
                Log(DateTime.Now + ": Can not invoke .NET 4.5 method");
            }
            return (Stream) typeof (HttpRequest).GetMethod("GetBufferlessInputStream",
                                                           BindingFlags.Public | BindingFlags.Instance,
                                                           null, new Type[0], null)
                                                .Invoke(request, new object[0]);
        }
        return request.InputStream;
    }
}

Журнал говорит, что метод из .NET 4.5 вызывается без исключений.Но эта ссылка http://aspnet.uservoice.com/forums/41199-general-asp-net/suggestions/2642879-maximum-upload-size-in-asp-net-is-2gb-increase-it говорит: «Завершено. Этот предел увеличивается в 4,5».

Поэтому у меня есть только один вопрос: «КАК?»

...