@denis_MInB

Загрузить 350000 строк на сервер, как сделать?

Есть ASP.NET MVC сайт, который хостится на reg.ru
есть на входе файл Excel, содержимое файла нужно загрузить через сайт в БД. Возникает проблема скорей всего с таймаутом соединения, появляется "ERR_CONNECTION_RESET" - Не удается получить доступ к сайту. Файл весит 8МБ, количество записей 350 000. (может быть больше около 800 тыс).
В Web.config у меня на данный момент указано
<httpRuntime maxRequestLength="16384" executionTimeout="3600"/>

Метод отвечающий за загрузку:
[HttpPost]
    public ActionResult UploadLsGis(HttpPostedFileBase upload2)
    {            
        List<LsKvitGis> l = new List<LsKvitGis>();
        if (upload2 != null && upload2.ContentLength > 0)
        {
            int SN = 1;
            var fileName = Path.GetFileName(upload2.FileName);
            var path = Path.Combine(Server.MapPath("~/App_Data/Files"), fileName);
            upload2.SaveAs(path);
            using (XLWorkbook workBook = new XLWorkbook(path))
            {
                var ws = workBook.Worksheet(1);
                int lastrow = ws.LastCellUsed().Address.RowNumber;
                while (SN<=lastrow)
                {                        
                    l.Add(new LsKvitGis {
                        LS = ws.Row(SN).Cell(1).Value.ToString(),
                        LSGis = ws.Row(SN).Cell(2).Value.ToString()
                    });
                    SN++;
                }
            }
            db.lsKvitGiss.RemoveRange(from s in db.lsKvitGiss select s); //удаляю что было раньше
            db.lsKvitGiss.AddRange(l); // добавляю
            db.SaveChanges(); // сохраняю
            ViewBag.Message = "Файл с ЛС ГИС загружен";
        }
        return View("Index");
    }


На локалхосте загружается файл целиком без проблем. На продакшене грузятся небольшие файлы (3800 строк загрузил), большие - не грузятся.
Выяснил что хостер ограничивает ресурсы ( служба поддержки прислала логи, действительно увидел что вылетает и по ЦПУ и по ОП)
Пока переходить на выделенный сервер не получается, нужно придумать как обойти ограничение сервера.
Возможно есть мысли?
Можно конечно бить файлы на более мелкие на стороне пользователя, но это тоже не выход, заказчик на такое не хочет соглашаться. Если бить при загрузке...
  • Вопрос задан
  • 152 просмотра
Пригласить эксперта
Ответы на вопрос 2
@Free_ze
Пишу комментарии в комментарии, а не в ответы
Можно попытаться разбивать файл на чанки и их поэтапно отправлять разными запросами.
Ответ написан
Комментировать
@Mindgrow
Приделай WebAPI к своему серверу и передавай данные построчно через Json/XML
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы