Большой файл (›2gb) не записывается на диск

У меня есть проект Web API 2, который принимает загрузку файлов. Загрузка небольших файлов работает довольно хорошо, но когда дело доходит до больших файлов, они просто не записываются на диск. Мне кажется, что это происходит с файлами размером где-то около 2 ГБ. Файлы размером около 1 Гб загружаются довольно хорошо.

Это соответствующие части моего web.config:

<system.web>
  <compilation debug="true" targetFramework="4.6.1" /> 
  <httpRuntime targetFramework="4.6.1" maxRequestLength="2147483647"  />
</system.web>

...

<system.webServer>
    <handlers>
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
    <security>
      <requestFiltering>
        <requestLimits maxAllowedContentLength="4294967295" />
      </requestFiltering>
    </security>
  </system.webServer>

Я получил значения для maxAllowedContentLength и maxRequestLength из этого ответа.

Поскольку я использую IIS 8, я ожидаю, что будет достигнуто значение maxAllowedContentLength.

И это действие, отвечающее за обработку загрузки, основанное на эта запись в блоге Филиппа В.:

    [HttpPost]
    public async Task<HttpResponseMessage> Post()
    {
        //Check if the request contains multipart/form-data.
        if (!Request.Content.IsMimeMultipartContent())
        {
            throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
        }

        string uploadPath = @"C:\temp\upload"; // in reality this is retrieved from DB

        try
        {
            var provider = new MultipartFormDataStreamProvider(uploadPath);
            var content = new StreamContent(HttpContext.Current.Request.GetBufferlessInputStream(true));
            foreach (var header in Request.Content.Headers)
            {
                content.Headers.TryAddWithoutValidation(header.Key, header.Value);
            }

            var result = await content.ReadAsMultipartAsync(provider);

            return Request.CreateResponse(HttpStatusCode.Accepted);
        }
        catch(Exception e)
        {
            return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e);
        }

    }

Загрузка небольших файлов работает. Я вижу, что они записаны в c:\temp\upload. Но большие файлы не сохраняются, хотя я вижу, как они приходят (смотря Диспетчер задач > Производительность:

Загрузка 20 Мбит/с на сервер

У кого-нибудь есть идея, почему я не вижу большие запросы, сохраненные на диске, в то время как файлы меньшего размера сохраняются?


person jao    schedule 31.05.2016    source источник
comment
Логи сервера проверяли? Вы пытались сохранить файл размером 1,9 ГБ? Иногда максимальный предел загрузки составляет 2 ГБ, но верхний и нижний колонтитулы создают проблему.   -  person Ritesh    schedule 31.05.2016
comment
В журнале событий, к сожалению, ничего нет. Я еще не проверял 1,9 ГБ, потому что у меня нет файла размером 1,9 ГБ. позже постараюсь проверить   -  person jao    schedule 31.05.2016