Ошибка при загрузке больших файлов - указанное приложение CGI обнаружило ошибку, и сервер завершил процесс - PullRequest
0 голосов
/ 21 июня 2019

Мы загружаем файлы шейп-файлов на наш GeoServer с помощью запросов REST в нашем приложении ASP.net.Небольшие файлы .zip (~ 2 МБ) работают нормально, но ничего большего (у нас есть один .zip ~ 70 МБ) не получится.WebRequest.GetResponse () возвращает неверный шлюз 502, считывание потока ответа выдает следующую ошибку:

"Указанное приложение CGI обнаружило ошибку, и сервер завершил процесс."

Этокод, который создает запрос и получает ответ:

WebRequest request = WebRequest.Create(URL);

request.ContentType = "application/xml";
request.Method = "PUT";
request.Credentials = new NetworkCredential(username, pswd);

Stream requestStream = request.GetRequestStream();
requestStream.Write(contentBytes, 0, contentBytes.Length);
requestStream.Close();

WebResponse response = request.GetResponse();

вызов REST для / workspaces / {workspaceName} / datastores / {storeName} / {method}. {format} , который загружает файлы в указанное хранилище данных и создает его, если он не существует.

contentBytes - это байт [], созданный из MemoryStream из загруженного архива HttpPostedFile.

Like Iсказал, работает с меньшими молниями.Похоже, что поиск ошибки указывает на то, что она исходит из Azure или IIS, однако ни одно из решений не соответствует нашему случаю ( изменение web.config способами, которые не применяются к нашему приложению или не работают ), поскольку это не приложение .net Core.

Этот вопрос , похоже, имел аналогичную проблему, но получал другие сообщения об ошибках.Увеличение таймаута не работает ни в C #, ни в web.config.

Похоже, что с самими шейп-файлами нет ничего плохого, другие программы просмотра шейп-файлов могут обрабатывать эти шейп-файлы.

1 Ответ

0 голосов
/ 12 июля 2019

Наше лучшее предположение закончилось тем, что мы достигли какого-то ограничения размера тела где-то в запросах REST, а не получили обратно полезное сообщение об ошибке или не получили какое-либо сообщение об ошибке в журналах GeoServer.Короче говоря, мы перешли от загрузки файла через REST API GeoServer (простой и понятный) к загрузке вручную через FTP, а затем использовали URL-адрес недавно загруженных файлов в запросе REST (грязный и сложный).):

  1. В нашем коде C # мы делаем запрос FTP (получение учетных данных FTP из Azure) для создания каталога в "данные "папка для новых файлов.Это место, куда импортер помещал файлы, когда мы загружали его через REST.

  2. Выполните FTP-запросы для каждого файла в .zip, загрузив их в новый каталог .

  3. Наконец, выполняет вызов REST для импорта слоя , (используя / workspaces / {workspaceName} / datastores / {storeName} / {method}. {format}), и вместо отправки файла в теле, отправьте URL загруженного файла .shp.

  4. Если какой-либо шаг завершится неудачно, выполните откат и удалитефайлы в каталоге FTP, а затем удалите каталог .

...