Загрузка HTTP-файла C# показывает “программа не может запуститься " во время установки
Я использую HTTP веб-запрос, ответ чтобы получить url-ответ, который представляет собой exe-файл с сервера jenkins размером файла более 450 МБ. Ответы считываются и хранятся на моем локальном диске с помощью Filestream. Когда ответ будет непрерывным, я смогу успешно загрузить и установить exe-файл.
Сценарий Выпуска: Иногда чтение ответа равно нулю, и полный файл не читается, поэтому я продолжаю загрузку, передавая Веб-запрос.Addrange(частично загруженный размер) который считывает байты из частично загруженного размера и сохраняет их на моем диске, после полной загрузки я вижу "не могу запустить ошибку" во время установки.
Я поделился кодом, пожалуйста, укажите, где я ошибаюсь. Также сервер поддерживает частичное содержимое
Что я уже пробовал:
System.IO.FileStream saveFileStream = null; try { long iFileSize = 0; int iBufferSize = 1024; iBufferSize *= 1000; long iExistLen = 0; if (System.IO.File.Exists(path)) { System.IO.FileInfo fINfo = new System.IO.FileInfo(path); iExistLen = fINfo.Length; } if (iExistLen > 0) saveFileStream = new System.IO.FileStream(path, System.IO.FileMode.Append, System.IO.FileAccess.Write, System.IO.FileShare.None); else saveFileStream = new System.IO.FileStream(path, System.IO.FileMode.Create, System.IO.FileAccess.Write, System.IO.FileShare.None); HttpWebRequest hwRq1 = (HttpWebRequest)System.Net.HttpWebRequest.Create(urlAddress); hwRq1.AddRange((int)iExistLen); using (HttpWebResponse hwRes = (System.Net.HttpWebResponse)hwRq1.GetResponse()) { using (System.IO.Stream smRespStream = hwRes.GetResponseStream()) { smRespStream.ReadTimeout = 60000; iFileSize = hwRes.ContentLength; int iByteSize; byte[] downBuffer = new byte[iBufferSize]; while ((iByteSize = smRespStream.Read(downBuffer, 0, downBuffer.Length)) > 0) { saveFileStream.Write(downBuffer, 0, iByteSize); Console.WriteLine(iExistLen.ToString()); } saveFileStream.Close(); smRespStream.Close(); if (iByteSize == 0 && !FileSizeCheck(path, softwareWithSize.Value)) return new Tuple<string, bool>("Zero byte received", false); } }
Richard MacCutchan
Вы должны быть в состоянии понять, где вы идете не так, пройдя через код с помощью вашего отладчика. Просто проверьте правильность смещений файлов при добавлении к существующему частично загруженному файлу.
Guru Thanu Nallasivan Guru
Как избежать / пропустить исключения в HTTP-ответе, добавляемые в виде байтов во время загрузки файла в c#
Guru Thanu Nallasivan Guru
Сохраненные байты также содержат сообщения об исключениях, что и вызывает проблему
Richard MacCutchan
Посмотрите на сообщение об исключении. Он подскажет вам, что не так, поэтому вам нужно выяснить, что вызывает это, и исправить свой код, чтобы избежать этого в будущем.
Guru Thanu Nallasivan Guru
Я получил ниже исключение, которое отправляется сервером
При обработке запроса возникла проблема. Пожалуйста, проверьте наш баг-трекер, чтобы узнать, не было ли уже сообщений о подобной проблеме. Если об этом уже сообщалось, пожалуйста, проголосуйте и прокомментируйте это, чтобы мы могли оценить влияние проблемы. Если вы считаете, что это новый выпуск, пожалуйста, подайте новый выпуск. Когда вы регистрируете проблему, обязательно добавьте всю трассировку стека вместе с версией Jenkins и соответствующими плагинами. Список пользователей также может быть полезен для понимания того, что произошло.
Трассировка стека
Ява.Ио.Класс IOException: Java для.утиль.одновременно.TimeoutException: истек тайм-аут ожидания: 5000/5000 МС
в орг.затмение.причал.утиль.SharedBlockingCallback$Blocker.block(SharedBlockingCallback. java:234)
в орг.затмение.причал.сервер.HttpOutput.писать(HttpOutput.Ява:141)
в орг.затмение.причал.сервер.HttpOutput.писать(HttpOutput.Ява:355)
в орг.kohsuke.степлер.Степлер.serveStaticResource(степлером.Ява:585)
в орг.kohsuke.степлер.ResponseImpl.serveFile(ResponseImpl.Ява:216)
в Гудзоне, модель.DirectoryBrowserSupport.serveFile(DirectoryBrowserSupport.Ява:319)
в Гудзоне, модель.DirectoryBrowserSupport.generateResponse(DirectoryBrowserSupport. java:127)
в орг.kohsuke.степлер.HttpResponseRenderer$По Умолчанию.handleHttpResponse(HttpResponseRenderer.Ява:124)
в орг.kohsuke.степлер.HttpResponseRenderer$По Умолчанию.generateResponse(HttpResponseRenderer.Ява:69)
в орг.kohsuke.степлер.Function.renderResponse(Function. java:127)
в орг.kohsuke.степлер.Function.bindAndInvokeAndServeResponse(Function. java:110)
в орг.kohsuke.степлер.Метакласс$1.doDispatch(метакласс.Ява:124)
в орг.kohsuke.степлер.NameBasedDispatcher.отправка(NameBasedDispatcher.Ява:58)
в орг.kohsuke.степлер.Степлер.tryInvoke(степлером.Ява:746)
в орг.kohsuke.степлер.Степлер.вызов(степлером.Ява:876)
в орг.kohsuke.степлер.Метакласс$10.отправка(метакласс.Ява:362)
в орг.kohsuke.степлер.Степлер.tryInvoke(степлером.Ява:746)
в орг.kohsuke.степлер.Степлер.вызов(степлером.Ява:876)
в орг.kohsuke.степлер.Метакласс$5.doDispatch(метакласс.Ява:236)
в орг.kohsuke.степлер.NameBasedDispatcher.отправка(NameBasedDispatcher.Ява:58)
в орг.kohsuke.степлер.Степлер.tryInvoke(степлером.Ява:746)
в орг.kohsuke.степлер.Степлер.вызов(степлером.Ява:876)
в орг.kohsuke.степлер.Степлер.вызов(степлером.Ява:649)
в орг.kohsuke.степлер.Степлер.обслуживание(степлером.Ява:238)
в пакете javax.сервлет.протоколу HTTP.Он полностью реализует интерфейс.сервис(он полностью реализует интерфейс.Ява:790)
в орг.затмение.причал.сервлет.ServletHolder.ручка(ServletHolder.Ява:812)
в орг.затмение.причал.сервлет.ServletHandler$CachedChain.doFilter(ServletHandler. java:1669)
на Гудзон.утиль.PluginServletFilter$1. doFilter(PluginServletFilter. java:135)
в орг.jenkinsci.Плагины.ssegateway.Конечная Точка$SSEListenChannelFilter.doFilter(Endpoint. java:225)
на Гудзон.утиль.PluginServletFilter$1. doFilter(PluginServletFilter. java:132)
в IO.Дженкинс.blueocean.ResourceCacheControl.doFilter(ResourceCacheControl. java:134)
на Гудзон.утиль.PluginServletFilter$1. doFilter(PluginServletFilter. java:132)
на Дженкинс.метрики.осущ.MetricsFilter.doFilter(MetricsFilter. java:125)
на Гудзон.утиль.PluginServletFilter$1. doFilter(PluginServletFilter. java:132)
на Гудзон.утиль.PluginServletFilter.doFilter(PluginServletFilter. java:126)
в орг.затмение.причал.сервлет.ServletHandler$CachedChain.doFilter(ServletHandler. java:1652)
на Гудзон.безопасности.от CSRF атак.Крошкофильтр.doFilter(CrumbFilter. java: 86)
в орг.затмение.причал.сервлет.ServletHandler$CachedChain.doFilter(ServletHandler. java:1652)
в Гудзоне, служба безопасности.ChainedServletFilter$1. doFilter(ChainedServletFilter. java:84)
в Гудзоне, служба безопасности.Цепной сервлетфильтр.doFilter(ChainedServletFilter. java:76)
в Гудзоне, служба безопасности.Гудзонфильтр.doFilter(HudsonFilter. java:171)
в орг.затмение.причал.сервлет.ServletHandler$CachedChain.doFilter(ServletHandler. java:1652)
в орг.kohsuke.степлер.сжатия.CompressionFilter.д
Richard MacCutchan
Вам нужно а) сделать то, что говорит вам сообщение об ошибке, и Б) проверить у администраторов сервера наличие каких-либо проблем с сайтом.
Guru Thanu Nallasivan Guru
спасибо за ответ
Guru Thanu Nallasivan Guru
Спасибо за ваш ответ,
Есть ли способ избежать чтения таких ответов из потока во время записи файла
sreeyush sudhakaran
Увеличьте значение таймаута ответа