|
Обмен данными через Web-сервисы | ☑ | ||
---|---|---|---|---|
0
mzelensky
05.09.14
✎
08:43
|
Доброго всем. Пишу небольшую конфигурацию для мобильного приложения на 8.3. Разумеется планируется организовать обмен с центральной базой. Обмен буду делать через web-сервисы.
На данный момент обмениваться предполагается всего 2 объектами - справочник "Контрагенты" и документ "Посещение клиента" + несколько доп. параметров для администрирования, но возможно далее конфа будет расширяться и объектов для обмена станет больше. Поэтому нужно продуматьмаксимально удобный и расширяемый механизм. А теперь вопрос - каким образом лучше перебрасывать информацию. Варианты: 1) Серриализовать\ДеСерриализовать Структуру с таблицами значений в которой будет нужная инфа. 2) Записать обычный XML-файл и перекинуть. Сейчас меня смущает объем данных, которые будут перебрасываться, нормально ли их потянет механизм веб-сервисов. Для примера, первая выгрузка справочника контрагенты может содержать порядка тысячи элементов (далее естественно меньше) |
|||
1
quest
05.09.14
✎
08:48
|
по размерам - а чем 1 раз передать 1000 элементов, лучше чем 1000 раз передать по 1 элементу?
по формату - читай про XDTO |
|||
2
mzelensky
05.09.14
✎
08:52
|
(1) "по размерам - а чем 1 раз передать 1000 элементов, лучше чем 1000 раз передать по 1 элементу?" - а я про это и не говорил. Я буду за один раз перебрасывать все что мне нужно
"по формату - читай про XDTO" - при работе через Web-сервисы я в любом случае буду XDTO пользоваться. |
|||
3
mzelensky
05.09.14
✎
08:55
|
(2) Просто у меня есть видяшка видео-урока, где показан следующий механизм - создается таблица значений, заполняется нужными данными. Сериализуется. И как параметр отправляется в базу-приемник через Web-сервис. На строне приемника эта таблица получается как параметр, ДЕСериализуется и далее уже обрабатывается. Вроде все очень красиво и мне это нравится. Но я не знаю, что будет с этим механизмом, когда я в эту таблицу запишу, например, пару тысяч элементов.
Почему 1 раз 1000, а не 1000 раз по 1 - чтобы вызов сервера был 1 раз. Чтобы не рвать данные и сделать все в одной транзакции. Как в источнике, так и в приемнике. |
|||
4
quest
05.09.14
✎
09:04
|
ну если есть видео, то да - мозг включать не нужно. и сервер поберечь тоже стоит - зачем его 1000 раз дергать, такты процессорные же экономить надо
|
|||
5
mzelensky
05.09.14
✎
09:16
|
(4) Не понимаю твою иронию.
1) Конкретные "ЗА" и "ПРОТИВ" есть? 2) Опыт передачи таблиц по веб-сервисам есть? Какой и как? 3) В принципе опыт переброски больших объемов данных между базами по веб-сервисам есть? Какой и как? |
|||
6
tan76
05.09.14
✎
09:27
|
нормально передается, тз в 3500 строк из 10 колонок без проблем....
|
|||
7
wms
05.09.14
✎
09:27
|
(0)не делал, но в планах тоже интересно подобное сделать.отпишись.
единственное может не надо всех контрагентов передавать менеджеру, а только тех которые ему назначены |
|||
8
Широкий
05.09.14
✎
09:34
|
(0) У операции веб сервиса сделай свойство типа двоичные данные ("ValueStorage (http://v8.1c.ru/8.1/data/core)".
Для передачи у меня используется структура таблиц значений. Сериализую так: "Новый ХранилищеЗначения(СтруктураДанныхОтвет,Новый СжатиеДанных(9));" |
|||
9
mzelensky
05.09.14
✎
09:36
|
(7) Естественно только его. Всех и не нужно. Я спрашиваю на "вырост" + еще чуть-чуть, т.к. не хочется в один прерасный момент упереться в какое-то ограничение по объему передаваемых данных
|
|||
10
mzelensky
05.09.14
✎
09:37
|
(6) Спасибо. Обнадежил :)
|
|||
11
mzelensky
05.09.14
✎
09:38
|
(8) Замечательно. Спасибо.
|
|||
12
tan76
05.09.14
✎
09:39
|
сейчас попробовал, таблица в 11000 строк пролезла без проблем
(8) интересная мысля... как нибудь проверю на досуге велика ли выгода относительно передачи просто таблицы значений |
|||
13
Широкий
05.09.14
✎
09:42
|
(12) Проверять :)
Убил бы на это столько времени как я - сам бы дошел |
|||
14
mzelensky
05.09.14
✎
09:42
|
У меня вообще прикольная архитектура намечается:
Структура с таблицами значений структур т.е. в каждом ключе стукрутры будет ТЗ с одной колонкой, в каждой строке которой будет структура с данными :) |
|||
15
quest
05.09.14
✎
09:42
|
(5)
Конкретно против передачи массива информации, там где можно обойтись передачей 1 параметра. Проще 1000 раз вызвать сервер с передачей 1 значения, чем в будущем заморачиваться с оборачиванием 1 значения в список. Или того хуже - заводить 2 метода для обмена - один для списка второй для элемента. По ограничениям - 62 тыс строк пролезало без проблем, но в условиях локальной сети. |
|||
16
tan76
05.09.14
✎
09:43
|
(13) Понял Шеф, принимаю как аксиому :)
|
|||
17
mzelensky
05.09.14
✎
09:44
|
(13) Кстати, попутный вопрос. Если плотно занимаетесь обменами - как реализуете (если реализуете) двухсторонний обмен ?
Я раньше вел свой регистр сведений, где хранил информацию по объектам созданным в источнике и затем ответно модифицированным и опять полученным. |
|||
18
Широкий
05.09.14
✎
09:49
|
(17) Планы обмена, 3х-звенка.
Мобильное приложение - сервер мобильного приложения - боевая база |
|||
19
mzelensky
05.09.14
✎
09:54
|
(18) я вчера тоже захотел на планах обмена попробовать. НО сразу косяк - автоматом создается УЗЕЛ текущей базы. А УЗЕЛ, в который будет выгружаться нужно создавать отдельно...для меня это не очень удобно.
Особенно учитывая, что у меня центральная база и порядка 20-25 мобильных устройств (баз). Следовательно 20-25 узлов плана. |
|||
20
Широкий
05.09.14
✎
09:56
|
(19) Поэтому и нужна промежуточная база. У меня сейчас там 200 узлов, деградации производительности нет
|
|||
21
mzelensky
05.09.14
✎
10:01
|
(20) Не, не хочу...это все дело нужно обслуживать, следить, холить и лелеять.
Мне нужно нечто более автономное. В принципе мой старый вариант работает доволно неплохо. |
|||
22
Широкий
05.09.14
✎
10:05
|
(21) Я тебя разве уговариваю? Автономность зависит от того как напишешь.
|
|||
23
mzelensky
05.09.14
✎
10:08
|
(22) Ну тут проде все сказанное: "принимаю как аксиому :)" (16)
:) |
|||
24
mzelensky
05.09.14
✎
10:14
|
(22) Еще вопрос - используешь какой-нибудь механизм проверки прошел обмен или нет?
ну т.е. например выполняется обмен, производится передача данных через инет на веб-сервис и на середине процесса инет падает. Это можно отловить? |
|||
25
Широкий
05.09.14
✎
10:21
|
(24) У планов обмена уже есть штатный механизм - номера сообщений принято/отправлено.
Если инфа не дошла - при следующем обмене она должна отправится повторно |
|||
26
mzelensky
05.09.14
✎
10:27
|
(25) понял, короче ты штатный механизм регистрации юзаешь.
|
|||
27
Serginio1
05.09.14
✎
14:43
|
Посмотри конфигурацию Управляемое приложение
там кстати есть пример вэб сервиса ОбменСМобильнымУстройством Для примера отправка Функция СформироватьПакетОбмена(УзелОбмена) Экспорт ЗаписьXML = Новый ЗаписьXML; ЗаписьXML.УстановитьСтроку("UTF-8"); ЗаписьXML.ЗаписатьОбъявлениеXML(); ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения(); ЗаписьСообщения.НачатьЗапись(ЗаписьXML, УзелОбмена); ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance"); ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("v8", "http://v8.1c.ru/data"); ТипДанныхУдаления = Тип("УдалениеОбъекта"); ВыборкаИзменений = ПланыОбмена.ВыбратьИзменения(УзелОбмена, ЗаписьСообщения.НомерСообщения); Пока ВыборкаИзменений.Следующий() Цикл Данные = ВыборкаИзменений.Получить(); // Если перенос данных не нужен, то, возможно, необходимо записать удаление данных Если Не ОбменМобильныеПереопределяемый.НуженПереносДанных(Данные, УзелОбмена) Тогда // Получаем значение с возможным удалением данных УдалениеДанных(Данные); КонецЕсли; // Записываем данные в сообщение ОбменМобильныеПереопределяемый.ЗаписатьДанные(ЗаписьXML, Данные); КонецЦикла; ЗаписьСообщения.ЗакончитьЗапись(); Возврат Новый ХранилищеЗначения(ЗаписьXML.Закрыть(), Новый СжатиеДанных(9)); КонецФункции |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |