Форум программистов, компьютерный форум, киберфорум
C#: Веб-сервисы, WCF
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.50/312: Рейтинг темы: голосов - 312, средняя оценка - 4.50
19 / 8 / 0
Регистрация: 01.08.2016
Сообщений: 102
07.09.2016, 14:54
Студворк — интернет-сервис помощи студентам
И помегабайтно (0-1048575 , 1048576-2097151 и т.д. т.п.) пробовал куски запрашивать? Все равно принуждает к кускам по 5мб?
Ну и самый жестокий вариант теста ГИСа, пойти прямо по их примеру, выгружать блоками по 1000 байт ( 0-999 )? =)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.09.2016, 14:54
Ответы с готовыми решениями:

Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ (5)
Предыдущая тема: https://www.cyberforum.ru/web-services-wcf/thread1840159.html И так мы Я и umatkot, Берёмся за реализацию всего этого...

Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ (4)
Предыдущая тема: https://www.cyberforum.ru/web-services-wcf/thread1800721.html Здравствуйте. Подскажите, пожалуйста: делаю getState...

Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ
Здравствуйте! Передо мной стоит задача интеграции с системой ГИС ЖКХ (https://dom.gosuslugi.ru/) программой, написанной на языке...

400
 Аватар для NaGuWaL
17 / 14 / 0
Регистрация: 22.04.2016
Сообщений: 287
07.09.2016, 14:59
Вот тебе все куски:

это куски одного зип архива -1 байт((((
Вложения
Тип файла: zip part_1.zip (5.00 Мб, 25 просмотров)
Тип файла: zip part_2.zip (5.00 Мб, 14 просмотров)
Тип файла: zip part_3.zip (5.00 Мб, 15 просмотров)
Тип файла: zip part_4.zip (425.9 Кб, 13 просмотров)
0
 Аватар для NaGuWaL
17 / 14 / 0
Регистрация: 22.04.2016
Сообщений: 287
07.09.2016, 15:02
nORb Dragon, Яж те писал... первый кусок статично должен быть равен диапазону 0-5242880 не 0-5242879 не 0-5242860 вот так-то(((
0
19 / 8 / 0
Регистрация: 01.08.2016
Сообщений: 102
07.09.2016, 15:08
Не, я имею в виду вообще тупо задать рендж даже не по 5 мб (5242880 или 5242879), а мелкие пакеты размерностью вплоть до 1000 байт.

ps: щаз пощупаем-с кусочки... если негодяи по работе не начнут меня дергать, заставлять делать работу и манить запахом зарплаты... х.Х
0
 Аватар для NaGuWaL
17 / 14 / 0
Регистрация: 22.04.2016
Сообщений: 287
07.09.2016, 15:17
nORb Dragon, XD))) Ну блин как бы тебе объяснить... сервак файлит
Дополнительные сведения: Запрошенное значение "Incorrect range" не найдено.

Добавлено через 1 минуту
0-999
0
19 / 8 / 0
Регистрация: 01.08.2016
Сообщений: 102
07.09.2016, 16:13
Нормальные кусочки... За исключением последнего. Собрал из кусочков файл, сравнил побайтно. Последнего байта нет в последнем куске, да. В итоге на рендж можно забить, имхо, проблема не в нем. Иначе бы... Хотяя...
В твоем коде я не вижу, как именно ты используешь этот класс. Там только объявление класса, без объявления объекта и его использования. Хотя возможно c# сильно отличается от других языков, и мой глаз не замечает этих строк. %)
Меня интересует цикл (?), где ты вызываешь метод
C#
1
HttpRequestMessage RequestUnitDownLoading(XDir dir, Guid fileId, long? form, long? to)
Как у тебя организована передача в метод параметров диапазона (form, to)? Особенно касаемо "последнего куска". Или там универсальный алгоритм? Можно на этот кусок кода посмотреть?

Кстати, у тебя производится анализ значения поля Content-length: из ответа с сервера? В ответе с "последним куском" что в этом поле написано? 436083 или 436084 байта?
Любопытно, что у изначального файла-архива три последних байта - #00. Не хочется подозревать, что кто-то воспринимает "лишние #00" в качестве "конца файла".
0
 Аватар для NaGuWaL
17 / 14 / 0
Регистрация: 22.04.2016
Сообщений: 287
07.09.2016, 16:18
nORb Dragon, Увот он -
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
       public void ExportFile(Root.XDir dir, Guid fileGuid)
        {
            var engi = new Enginer(dir) {SessionId = fileGuid.ToString()};
 
            var  res = engi.RequestLoadingUnitInfo();
            var mxx = engi.SendRequest(res).ResultEnginer<ResponseInfoModel>();
 
            if (mxx.XError != null)
            {
                return;
            }
 
            if (mxx.RFileParts.Length > 1)
            {
                var mod = (int)(mxx.RFileLength % SignBinds.maxPartSize);
                var size = 0;
                var par = new List<ExplodUnit>();
                var tox = 0;
                foreach (var parts in mxx.RFileParts)
                {
                    //size == 0 ? (int)SignBinds.maxPartSize : size ==((int)SignBinds.maxPartSize - 1) ? (size + (int)SignBinds.maxPartSize)+1:
 
                    var ss = (size + (int)SignBinds.maxPartSize);
 
 
                    tox = (int)mxx.RFileLength < ss ? (int)mxx.RFileLength - 1 : ss;
                    var toy = (int)mxx.RFileLength < ss ? (int)mxx.RFileLength : ss;
 
 
                    var dowx = engi.RequestUnitDownLoading(dir, fileGuid, size, tox);
                    var nmmx = engi.SendRequest(dowx).ResultEnginer<ResponseDownloadModel>();
 
                    // Open file for reading
                    System.IO.FileStream _FileStream =
                       new System.IO.FileStream($"D:\\part_{parts}", System.IO.FileMode.Create,
                                                System.IO.FileAccess.Write);
                    // Writes a block of bytes to this stream using data from
                    // a byte array.
                    _FileStream.Write(nmmx.RFileBytes, 0, nmmx.RFileBytes.Length);
 
                    // close file stream
                    _FileStream.Close();
 
                    par.Add(new ExplodUnit { from = size, to = tox, part = parts,unit = nmmx.RFileBytes});
                    size = ss;
 
                    
                }
 
                var file = engi.CollectFile(par);
                
            }
 
            var dow = engi.RequestEasyDownLoading(dir, fileGuid);
            var nmm = engi.SendRequest(dow).ResultEnginer<ResponseDownloadModel>();
 
        }
0
19 / 8 / 0
Регистрация: 01.08.2016
Сообщений: 102
07.09.2016, 16:31
C#
1
tox = (int)mxx.RFileLength < ss ? (int)mxx.RFileLength - 1 : ss;
Я правильно понимаю эту строку? Если мы добрались в цикле до "последнего куска", то мы берем от последнего куска все, кроме последнего байта? А что, если вместо tox использовать значение из toy? Ну или tox привести к виду:
C#
1
tox = (int)mxx.RFileLength < ss ? (int)mxx.RFileLength : ss;
0
 Аватар для NaGuWaL
17 / 14 / 0
Регистрация: 22.04.2016
Сообщений: 287
07.09.2016, 16:37
nORb Dragon, будет вот это

Дополнительные сведения: Запрошенное значение "Incorrect range" не найдено.

и да ты понимаешь всё верно...

Добавлено через 3 минуты
я пробовал тонцевать в разных позах но пока ситема чпокает только меня((( Мне грустно.... и печально...
0
19 / 8 / 0
Регистрация: 01.08.2016
Сообщений: 102
07.09.2016, 16:40
Лааадно... А что у тебя хранится в (int)mxx.RFileLength, когда цикл выполняет последний заход?
0
 Аватар для NaGuWaL
17 / 14 / 0
Регистрация: 22.04.2016
Сообщений: 287
07.09.2016, 16:46
nORb Dragon, ну как бэ полный сайз выгружаемого файла

Добавлено через 1 минуту
maxPartSize = всегда равен 5242880 - это размер части при эксплоде и при выгрузке... По суте константа...
0
19 / 8 / 0
Регистрация: 01.08.2016
Сообщений: 102
07.09.2016, 16:54
Цитата Сообщение от NaGuWaL Посмотреть сообщение
ну как бэ полный сайз выгружаемого файла
Как бы... Вот на момент выполнения последнего прохода в цикле, чему равно значение внутри (int)mxx.RFileLength? Ровно. Целым числом. Без линков на "как бы" и "приблизительно". %)

*неправильный код, убрал*
0
 Аватар для NaGuWaL
17 / 14 / 0
Регистрация: 22.04.2016
Сообщений: 287
07.09.2016, 17:12
nORb Dragon, Вот смотри. в последнем проходе что происходи:

C#
1
2
3
4
part:4
from: 15728640
to: tox = 16164723
byte_size: 436083
пельме?

* удалил пояснение к неправильному коду *

(int)mxx.RFileLength = 16164724

Добавлено через 13 минут
(int)mxx.RFileLength == Content-length
0
19 / 8 / 0
Регистрация: 01.08.2016
Сообщений: 102
07.09.2016, 18:43
Хмм... Правильный размер файла - 16164724. С учетом того, что tox у тебя уменьшает на единицу в случае "неполного куска", предполагается что на сервере ланита находится полноценный файл.

Насколько подозреваю, вариант тупо залить этот файл на какой-нибудь личный сервак с apache/nginx и попробовать вытянуть его оттуда этим кодом (с убиранием "-1" из tox), можно не предлагать? Уже тестил и проблем не возникло?

В таком случае мое скромное мнение: баг у ланита, о котором надо как-то им сообщить. Если утрировать и не вдаваться в подробности, то можно как-то так:

Не по теме:

А у вас выгрузка файла по частям (размерностью свыше 5мб) через интеграцию с серверов СИТ не работает! Ха-ха!



Добавлено через 1 час 24 минуты
NaGuWaL, ты же можешь тестировать не полноценную выгрузку, а интересующий тебя диапазон? Представим, что наш код идеален и красив настолько, что его можно использовать. Ну да, хотя меня все равно смущают перекрывающие друг друга ренджи в том коде, но получаемые куски по какой-то волшебной причине имени Ланита не содержат "задвоения байтов". Это смущает, настораживает, ну да ладно. Колдовство!

Предлагаю в коде функции, которую ты приводил выше, подправить:
C#
1
var dowx = engi.RequestUnitDownLoading(dir, fileGuid, size, tox);
на:
C#
1
var dowx = engi.RequestUnitDownLoading(dir, fileGuid, size, ((int)mxx.RFileLength < ss ? NULL : ss ) );
Ну а tox вернуть к "без-минус-адын варианту", благо загрузке мешать он (предположительно) больше не будет.

По задумке, если верить разным источникам по http-запросам и msdn (?), то получим генерацию запроса с параметром в заголовке вида:
Code
1
Range: bytes=xxxx-
, где xxxx - указанный нами form (очепятки рулят и карают!). NULL в качестве второго параметра (окончания диапазона) в RangeHeaderValue теоретически должно дать нам не ошибку генерации диапазона, а как раз вышеуказанный вид.
Отсутствие значения после тире должно серверу намекать, что тебе нужен оставшийся кусок файла, начиная с позиции xxxx (form).

Если сильно повезет... Что предложенный мною вариант не сбойнет (тестить не на чем xD, и .нет осваивать желания никакого нет), да и что у Ланита обработчик подобных запросов существует... то ты получишь многострадальный последний кусок от файла с потерявшимся байтом.
0
 Аватар для hhmm
67 / 58 / 1
Регистрация: 01.04.2016
Сообщений: 346
07.09.2016, 21:51
Хм, хотя мне загрузка/выгрузка файлов пока не нужна, но и интересом читаю про свежие косяки
Господа, а почему бы вам не зайти с другой стороны и попробовать создать и залить файл размером 1 байт, а потом выгрузить его обратно?

Потом два байта...
0
08.09.2016, 00:28

Не по теме:

Опасные вещи предлагаешь... А вдруг возрадуемся удаче, и на радостях попробуем три байта? И хоп! Краш соединения, СИТ-2 не отвечает, свет гаснет, исходники не сохранены, паника! И только лишь ядерный грибок о чем-то приятном намекает на горизонте...

0
 Аватар для NaGuWaL
17 / 14 / 0
Регистрация: 22.04.2016
Сообщений: 287
08.09.2016, 09:50
nORb Dragon, Блин, да ты весельчак, позитивный... Пробую загрузить последнюю часть по твоему предложению)))

Добавлено через 1 час 25 минут
собственно вот ответ:
JSON
1
2
3
4
5
6
7
8
9
10
{StatusCode: 500,
 ReasonPhrase: 'Internal Server Error', Version: 1.1,
 Content: System.Net.Http.StreamContent, Headers:
{
  Transfer-Encoding: chunked
  Connection: keep-alive
  Date: Thu, 08 Sep 2016 06:46:00 GMT
  Server: nginx
  Content-Type: text/html; charset=utf-8
}}
Добавлено через 43 секунды
так что твой вариант не канает(((
0
19 / 8 / 0
Регистрация: 01.08.2016
Сообщений: 102
08.09.2016, 10:02
Это ответ от ланитовского сервера? Или от твоего "приватного" с nginx'ом?
0
 Аватар для NaGuWaL
17 / 14 / 0
Регистрация: 22.04.2016
Сообщений: 287
08.09.2016, 10:06
nORb Dragon, Я работаю только с ланитовскими серваками..

Добавлено через 1 минуту
Выципил запросы-

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
{Method: GET, RequestUri: 'http://127.0.0.1:8080/ext-bus-file-store-service/rest/homemanagement/216bee92-347f-41d1-ada4-67d10effe822?getfile', Version: 1.1, Content: <null>, Headers:
{
  Date: Thu, 08 Sep 2016 06:52:42 GMT
  Authorization: Basic bGFuaXQ6dHYsbjghWWE=
  X-Upload-Dataprovider: 577afaad-c398-40e1-8f4e-e6341eb0b729
  Range: bytes=0-5242880
}}
 
 
{Method: GET, RequestUri: 'http://127.0.0.1:8080/ext-bus-file-store-service/rest/homemanagement/216bee92-347f-41d1-ada4-67d10effe822?getfile', Version: 1.1, Content: <null>, Headers:
{
  Date: Thu, 08 Sep 2016 06:55:17 GMT
  Authorization: Basic bGFuaXQ6dHYsbjghWWE=
  X-Upload-Dataprovider: 577afaad-c398-40e1-8f4e-e6341eb0b729
  Range: bytes=5242880-10485760
}}
 
 
{Method: GET, RequestUri: 'http://127.0.0.1:8080/ext-bus-file-store-service/rest/homemanagement/216bee92-347f-41d1-ada4-67d10effe822?getfile', Version: 1.1, Content: <null>, Headers:
{
  Date: Thu, 08 Sep 2016 06:57:55 GMT
  Authorization: Basic bGFuaXQ6dHYsbjghWWE=
  X-Upload-Dataprovider: 577afaad-c398-40e1-8f4e-e6341eb0b729
  Range: bytes=10485760-15728640
}}
 
 
{Method: GET, RequestUri: 'http://127.0.0.1:8080/ext-bus-file-store-service/rest/homemanagement/216bee92-347f-41d1-ada4-67d10effe822?getfile', Version: 1.1, Content: <null>, Headers:
{
  Date: Thu, 08 Sep 2016 07:00:34 GMT
  Authorization: Basic bGFuaXQ6dHYsbjghWWE=
  X-Upload-Dataprovider: 577afaad-c398-40e1-8f4e-e6341eb0b729
  Range: bytes=15728640-16164723
}}
0
1 / 1 / 0
Регистрация: 02.06.2016
Сообщений: 27
08.09.2016, 10:06
NaGuWaL Добрый день, у нас точно такая же проблема, теряется последний байт. В последней части файла в range приходится указывать на 1 байт меньше (((
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.09.2016, 10:06

.NET 4.x Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ (2)
Начало темы здесь: https://www.cyberforum.ru/web-services-wcf/thread1615223.html umatkot, Да, к этому и пришел....а на дворе 1 июля ...

Интеграция с ГИС ЖКХ и подпись SOAP без Крипто .NET и stunnel
Решил создать отдельную тему, так как в теме Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ (4) - C# WCF уже можно заблудиться....

Soap, Java, Гис ЖКХ
Добрый день! Имеет ли кто опыт работы с soap в Java? Поставлена задача наладить работу с ГИС ЖКХ, До этого не работал с SOAP, почитал все...

1С и ГИС ЖКХ. Интеграция
Доброго дня, коллеги! Я думаю многие слышали о такой ГИС, как ЖКХ. Друзья, сталкивался ли кто нибудь с задачей интеграции с этой...

Интеграция с ГИС ЖКХ (ГЖ). 400 Bad request
Вводная: 1. C#. Классы proxy для работы с API генерятся утилитой SvcUtil.exe из wsdl-ек. 2. При срабатывании форматно-логического...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
80
Закрытая тема Создать тему
Новые блоги и статьи
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru