Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Передача хранилища значения по веб сервису в стороннюю программу

Передача хранилища значения по веб сервису в стороннюю программу
Я
   maxipunchik
 
16.04.20 - 09:04
Как принять данные типа ХранилищеЗначения в другой программе, например, написанной на c#. Передаю xml в хранилище. Возвращает байты и из них не конвертируется в строку. Ромбики с вопросиками выдает.
   ДенисЧ
 
1 - 16.04.20 - 09:21
А как твоя программа вообще поймёт внутренний формат 1с?
   fisher
 
2 - 16.04.20 - 09:22
> Передаю xml в хранилище.
https://youtu.be/2RhvJ4VY6Cg
   Василий Алибабаевич
 
3 - 16.04.20 - 09:38
(0) "Возвращает байты и из них не конвертируется в строку."
Что-то вы как-то не туда...
Сериализованное значение из хранилища и есть строка.
   dezss
 
4 - 16.04.20 - 09:55
Лучше получить из хранилища и сериализовать в какой-нить json или xml.
   maxipunchik
 
5 - 16.04.20 - 10:20
(1) Вот в этом и вопрос. 1с пишет, что хранилище сериализуется, может и обработать как-то можно
   ДенисЧ
 
6 - 16.04.20 - 10:21
(5) А зачем именно ХЗ передать? Может, взять из него значение и уже нормально передать?
   maxipunchik
 
7 - 16.04.20 - 10:21
(3) ну вот, возвращаемое значение имеет тип byte[]
   maxipunchik
 
8 - 16.04.20 - 10:22
Скорее всего через зип сжимать придется, но было бы неплохо как-то с хранилищем решить
   Василий Алибабаевич
 
9 - 16.04.20 - 10:24
(7) "Передаю xml в хранилище."
Не нужно этого делать. Передавай xml как xml. Для уменьшения трафика можно попытаться запаковать. Но уж точно конвертировать xml в хранилище незачем.
   fisher
 
10 - 16.04.20 - 10:24
(8) Если вопрос со сжатием xml, то через архивирование и надо решать, а не добавлять во внешнюю программу обработку одинэсной сериализации.
   maxipunchik
 
11 - 16.04.20 - 10:26
(6) через зип можно. Кстати, сама 1с обмен в веб сервисе enterprice реализовала через зип. Просто есть мобильное приложение на 1с, там через хранилище передается. Чтобы 1 веб сервис для разных приложений (1с и не 1с) использовать, появилась потребность через хранилище сделать
   maxipunchik
 
12 - 16.04.20 - 10:27
(9) это стандартный способ, описанный в желтой книге по моб приложению, поэтому этот метод и используется
   Василий Алибабаевич
 
13 - 16.04.20 - 10:29
(7) "byte[]" это и есть строка. Не совсем строка правда, а массив байт.
(11) "Сама 1С" при отправке делает так :
Возврат Новый ХранилищеЗначения(ЗаписьXML.Закрыть(), Новый СжатиеДанных(9));
а на принимающей стороне :
ДанныеОбмена = Имярек.Получить();
Ваша стороння программа на решетках сделает также?
   fisher
 
14 - 16.04.20 - 10:29
(11) > Чтобы 1 веб сервис для разных приложений (1с и не 1с) использовать, появилась потребность через хранилище сделать
Странная логика. Обычно мыслят в сторону использования средств, стандартных для разных приложений. Я не вкручивать специфику одного из них во все остальные.
   Fragster
 
15 - 16.04.20 - 10:31
для сжатия проще настроить на веб сервере прозрачный gzip/deflate, а передавать именно строку
   fisher
 
16 - 16.04.20 - 10:32
(13) Да ничего сложного, думаю, расковырять это на решетках. Только минусов у такого решения будет гораздо больше, чем плюсов.
   fisher
 
17 - 16.04.20 - 10:33
(15) А это все клиенты/библиотеки поддерживают? 1С тоже будет прозрачно зиповать при отсылке?
   Василий Алибабаевич
 
18 - 16.04.20 - 10:46
(16) "ничего сложного, думаю, расковырять это на решетках."
Несколько вопросов
1. Знать как указано что там внутри. Именно как указано (смещение, длина, значение). Хорошо, что у ТС это ИМХО всегда строка. И можно все сделать наосЧупь. Но описания я не встречал.
2. Это придется делать на стороне решеток.
3. ЗаДляНафига это все?
   Fragster
 
19 - 16.04.20 - 11:05
(17) зиповать будет веб сервер
   Fragster
 
20 - 16.04.20 - 11:07
кстати, если кто не знал - есть офигенный модуль для 1с: https://github.com/vbondarevsky/Connector
почти без проблем :)
   fisher
 
21 - 16.04.20 - 11:10
(19) Как веб-сервер может зиповать то, что ему ОТПРАВЛЯЮТ?
   fisher
 
22 - 16.04.20 - 11:12
Это раз. Во вторых, клиент должен уметь понять и прозрачно разархивировать то, что он от веб-сервера получил. Я небольшой спец, но в здравый смысл немного умею. И он мне подсказывает - чтобы это работало, этот режим должны поддерживать обе стороны.
   Fragster
 
23 - 16.04.20 - 11:13
(21) отправляет веб сервер - ИИС или апач.
   Fragster
 
24 - 16.04.20 - 11:14
(24)+ если же 1с не сервер, а клиент (сама посылает запрос), то зиповать должна она, это умеет (20). Примерно как браузер.
   maxipunchik
 
25 - 16.04.20 - 11:15
(14) логика проста. Есть решение с хранилищем значения, есть желание узнать а можно ли это хранилище распарсить на C#. Переделывать на zip изначально желания не было. В интернете на итс нет никакой информации по valuestorage. Нет ни одной рекомендации. И вот это вот всё
   Fragster
 
26 - 16.04.20 - 11:18
(25) просто кто-то не умеет пользоваться интернетом. вот тут достаточно информации для расковыривания: http://catalog.mista.ru/public/1050764/
   maxipunchik
 
27 - 16.04.20 - 11:32
(26) нереальный геморрой, еще и так 
4) Распаковать ZIP архив, игнорируя ошибки распаковки (так как у нас нет данных о CRC сумме НЕ запакованных данных, а так же об их размере)

// Можно было и в памяти извлекать, но слишком много памяти кушает

Архив = Новый ЧтениеZipФайла(ПутьКФайлуАрхива);
Попытка
    Архив.Извлечь(Архив.Элементы[0], КаталогОбмена);
    //файл извлечется, хотя здесь возникнет исключение из-за некорректных размера файла и контрольной суммы

Исключение
КонецПопытки;


Нужен нормальный метод. Зип в одну строку распаковывается
   fisher
 
28 - 16.04.20 - 11:44
(24) Я прекрасно понимаю, что паковать должна отправляющая сторона. А принимающая должна распаковывать. Поэтому и задал вопрос. И вопрос этот был - поддерживает ли этот режим одинэсное HTTPСоединение(), например.
Потому что если нет - то совет был мимо.
   Fragster
 
29 - 16.04.20 - 12:13
(28) если принимающая сторона - это публикация 1с на веб сервере - то поддерживает, если 1с - это клиент, то надо все самому реализовывать (как и все остальное типа передачи заголовков, формирования мультипарт, обработки перенаправлений и прочего). Ну, или использовать готовое, см. (20)
   craxx
 
30 - 16.04.20 - 23:35
(0) А сразу xml как строку передавать не судьба?
 
 Рекламное место пустует


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.