WEB сервисы. Медленно работают... и часть данных теряется при передаче.

1. TODD22 18 31.05.16 11:06 Сейчас в теме
Здравствуйте.

Есть сервер и клиент. На сервере поднят вэб сервис. На клиенте получаю ссылки на 50 документов и в цикле начинаю их по одному отправлять на сервер.
На сервер приходит только 9-10 документов. При этом процедура пишет что завершилась и всё хорошо. Никаких ошибок в журнале регистрации нет.

В чём может быть проблема? Куда могут потерятся документы?
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. dmt 66 31.05.16 11:23 Сейчас в теме
(1) TODD22, а что должно быть написано в журнале регистрации?
3. dj_serega 391 31.05.16 11:24 Сейчас в теме
(1) TODD22, Что-куда-каким образом обрабатыватся/отправляется... непонятно.
5. AllexSoft 31.05.16 11:32 Сейчас в теме
(1) TODD22, когда используете WSПрокси там есть свойство Таймаут, может его поставить побольше ?
6. TODD22 18 31.05.16 11:48 Сейчас в теме
(5) AllexSoft, Вроде одну причину нашёл.... Моя ошибка. Почему то не всегда были данные для отправки...

Но возникает другой вопрос... Если на клиенте я получаю описание XDTO пакета с сервера это замедляет работу?
У меня на сервере определены XDTO пакеты. Описание строки и таблицы. Я их получаю на клиенте. Заполняю и потом отправляю.

Проблема в том что уходит много времени на подключение. Бывает по 4-7 секунд задержка пока прокси создаётся. Хотя базы обе лежат локально на одном ПК.
7. AllexSoft 31.05.16 11:57 Сейчас в теме
(6) TODD22, дело в том что при соединении с веб сервисом клиент получает описание веб-сервиса, то есть какие там типы используются, какие пространства имен, какие есть процедуры и функции, входящие\исходящие параметры и тд.. он получает это описание в XML, потом он преобразует это в коллекции соответствующих свойств объектов, все это занимает время.. отсюда длительное время подключения. Например в SOAP-клиенте на PHP есть флаг разрешающий кэширование определения сервиса, тогда соединение происходит гораздо быстрее.. по понятным причинам) а вот в 1C такого нет, к сожалению (
8. TODD22 18 31.05.16 12:03 Сейчас в теме
(7) AllexSoft, Это плохо :(
Попробую тогда может позже перейти на http сервисы.
Сейчас у меня вообще соединение по COM идёт... по сети со всей области магазины подключаются по СОМ.
Думал перейду на вэб сервисы будет быстрее.... :(
11. AllexSoft 31.05.16 12:12 Сейчас в теме
(8) TODD22, я бы на вашем месте не особо спешил переходить на http-сервисы, там свои проблемы ) я бы не был так уверен что он будет работать быстрее, не для этого он нужен) все таки правильная настройка сервиса и уменьшение описания сервиса за счет удаления пакетов может сыграть большую роль в ускорении.. я вот по большей части стараюсь либо сделать свой XDTO пакет с простыми типами типа строка, булево, число.. и передавать все в них, либо вообще обойтись без пакетов.. и передавать строку неограниченной длины (она работает без пакетов вообще), а вот в строку с помощью JSON http://v8.1c.ru/o7/201410json/index.htm можно положить что угодно =) Получается очень быстрый сервис.
25. dj_serega 391 31.05.16 15:00 Сейчас в теме
(7) AllexSoft,
Например в SOAP-клиенте на PHP есть флаг разрешающий кэширование определения сервиса, тогда соединение происходит гораздо быстрее.. по понятным причинам) а вот в 1C такого нет, к сожалению (

(8) TODD22,
Это плохо :(

Спешу обрадовать что за это дело 1С уже взялось:
https://wonderland.v8.1c.ru/blog/povyshenie-proizvoditelnosti-veb-servisov/
Но: Планируется в версии 8.3.9. =)
AllexSoft; +1 Ответить
27. AllexSoft 31.05.16 15:13 Сейчас в теме
(25) dj_serega, отличная статья в тему! может кстати у ТС действительно что то в модуле сеанса написано этого, что долго инициируется.. я что то совсем забыл этот момент. Даже с его пакетом 7 секунд на инициализацию веб-сервиса это очень много
9. AllexSoft 31.05.16 12:05 Сейчас в теме
(6) TODD22, ПС: если это ваш самописный веб сервис то зайдите на закладку Прочее, в свойствах веб-сервиса, там будет Пакеты XDTO, делайте минимальное количество пакетов, нужно отнестись к этому очень внимательно и изучить типы в каждом из пакетов и понятно насколько он вам нужен, иногда проще передавать в строках, чем использовать какой то тяжелый пакет с кучей свойств и выиграть время на подключении к сервису в итоге)
bomba; ipoloskov; +2 Ответить
10. TODD22 18 31.05.16 12:10 Сейчас в теме
(9) AllexSoft, Я передаю строковые данные. Это коды номенклатуры и тд. То есть там никаких сложных типов у меня нет.
Единственное у меня передаются данные в виде таблицы. То есть таблица продаж. А в ней строки.
Вот эта таблица и строки описаны в виде пакета.
Это я из типовой конфигурации взял. Вернее переделываю бонусный сервер в типовой рознице.
Вот на скрине те пакеты которые мне нужны. В них передаются продажи и бонусы.
Прикрепленные файлы:
12. AllexSoft 31.05.16 12:17 Сейчас в теме
(10) TODD22, покажи что у тебя в свойствах Веб-сервиса на закладке Прочие в поле "Пакеты XDTO", только один твой пакет и ничего лишнего?
13. TODD22 18 31.05.16 12:32 Сейчас в теме
(12) AllexSoft, Да в свойствах только один пакет.
14. AllexSoft 31.05.16 12:36 Сейчас в теме
(13) TODD22, ну тогда только разделять на разные web-сервисы, например один сервис возвращает информацию о накоплениях, другой о бонусах и тд, ну и разделить пакет ДисконтныйСервер на несколько соответственно.. либо вообще отказаться от пакетов и сделать сериализацию через JSON и передавать просто строку. Хотя может у вас там может просто ПК слабенький ..
15. TODD22 18 31.05.16 12:39 Сейчас в теме
(14) AllexSoft, ПК хороший i3 и 16 Гб ОЗУ.
Попробую в рабочем режиме как будет. Если до этого на COM работали то я думаю тут будет быстрее немного, относительно СОМ.
18. netesoff 4 31.05.16 12:59 Сейчас в теме
(1) TODD22, а нельзя передавать эти самые 50 документов одним пакетом? Зачем их передавать в цикле по одному? Передайте сразу все (сформируйте xml файлик, таблицу значений, еще что нибудь) а потом уже разбирайте на сервере, тем самым избежите проблем с большим количеством подключений.
ipoloskov; +1 Ответить
20. TODD22 18 31.05.16 13:03 Сейчас в теме
(18) netesoff, Это я просто в рамках эксперимента.
у меня с разных магазинов будут прилетать документы по одному...

Пока что передача в цикле это заглушка на случай если не было связи и нужно передать за целый день данные. Позже перепишу на передачу одним файлом.
4. Bazin 5 31.05.16 11:24 Сейчас в теме
На сервере сделай результат выполнения операции и смотри его на клиенте...
16. TODD22 18 31.05.16 12:50 Сейчас в теме
А нет опыта работы с большим количеством подключений? У меня доходит до 25 подключений в минуту... А нужно с запасом сделать хотя бы 50. То есть передавать от 50 клиентских баз по документу в минуту.
Потянет? сами документы у меня в базу записываются с движениями по одному регистру. А потом перепроводятся регламентным заданием.
Проверил 100 документов у меня передаются на сервер за 220 секунд, в среднем по 2.2 секунды на документ.
Это при том что прокси поднят. И в цикле просто вызываю функцию передачи.
17. TODD22 18 31.05.16 12:56 Сейчас в теме
Отправка одного документа с поднятием прокси 7 секунд.
Может это и нормально для сервисов...
19. netesoff 4 31.05.16 13:01 Сейчас в теме
(17) TODD22, 7*100 документов ~ 12 мин на передачу. Мне кажется очень уж долго будет... Пробуй (18)
21. TODD22 18 31.05.16 13:05 Сейчас в теме
(19) netesoff,
7*100 документов ~ 12 мин на передачу.

Базы разные... каждая свой документ отправляет. Когда покупатель бонусами рассчитывается.
У меня доходит до 25 продаж в минуту в 150 магазинах.
22. AllexSoft 31.05.16 13:31 Сейчас в теме
(21) TODD22, я бы на твоем месте задумался о Внешних источниках данных на клиентах.. подключаем базу (с разрешенным доступом из вне) через внешние источники и вуаля, получаем данные напрямую из базы и пишем их туда.. ну а малой кровью - все таки работать без пакетов, просто через передачу строки, которую формировать через ЗначениеВСтрокуВнутр и принимать на клиентах ЗначениеИзСтрокиВнутр
ПС: пропробуй ради эксперимента создай пустой веб-сервис, который возвращает "тест", без пакетов и пропробуй его вызвать, посмотришь какую выгоду получишь при подключении на сервисе без пакетов
23. TODD22 18 31.05.16 13:56 Сейчас в теме
(22) AllexSoft,
я бы на твоем месте задумался о Внешних источниках данных на клиентах..

У меня сеть из 150+ магазинов.
Я пока что не представляю как будут работать внешние источники данных и чем они будут быстрее сервисов.
24. AllexSoft 31.05.16 14:08 Сейчас в теме
(23) TODD22, будут быстрее веб-сервисов однозначно.. это прямая запись\чтение в базу получится, самый быстрый способ который только возможен
28. TODD22 18 31.05.16 15:20 Сейчас в теме
(24) AllexSoft,
будут быстрее веб-сервисов однозначно..

У меня магазины в разных городах, с совершенно разным интернетом... Но я посмотрю в сторону источников данных.
(25) dj_serega,
Но: Планируется в версии 8.3.9. =)

Это печально... :(

Установку параметров сеанса надо посмотреть. Что там происходит....
26. dj_serega 391 31.05.16 15:04 Сейчас в теме
Дочитав ветку хочу предложить написать на http.
Логика следующая:
1. Формируем xml
2. Пакуем в архив с паролем (можно упустить если соединение предполагается защищенным)
3. Пакуем файл (архив или xml) в двоичные данные
4. Пакуем в Хранилище Значения
5. теперь в строку и на http.
TODD22; k_vasil; +2 Ответить
29. TODD22 18 31.05.16 15:23 Сейчас в теме
А источники данных по какой технологии подключаются?
Сейчас у меня по COM подключаются узлы к центральной базе. Если плохое интернет соединение. Постоянно обрывается, но при этом ТимВьювер работает. И переодически переподключается. То COM может повесить 1Ску :(
30. AllexSoft 31.05.16 15:27 Сейчас в теме
(29) TODD22, внешние источники подключаются напрямую в БД (то есть прям непосредственно в MS SQL), с помощью драйвера, в обход 1С.. никаких инициализаций сеанса или сериализации данных там не происходит, поэтому нет дополнительных накладных расходов, которые есть и при HTTP-сервисе, и Web-сервисе. Правда нужно учитывать проблемы с записью в данные напрямую в БД, контроль целостности, перерасчет итогов виртуальных таблиц и тд..
31. TODD22 18 31.05.16 15:32 Сейчас в теме
(30) AllexSoft, Так это будет работать в пределах локальной сети? У меня сеть большая. Где то даже на gsm модемах сидят.
32. AllexSoft 31.05.16 16:01 Сейчас в теме
(31) TODD22, ну почему же, БД можно опубликовать во вне, в интернет, обычная проброска портов на шлюзе. Единственное нужно будет правильно настроить фаервол на шлюзе, что бы левые не коннектились.. хотя с GSM будет проблема, там IP динамический) Думаю вам лучше начать со скорости запуска Web-сервиса который вы написали, как он есть, с сеансовых модулей.. возможно создать отдельную роль под WebСервис, ну а в модуле сеанса инициализировать только самые важные параметры типа
Если РольДоступна("ДоступДляВебСервиса") тогда
//инициализируем только самые важные параметры
.....
выход;
КонецЕсли;

ну и я так понимаю вы тестируете скорость работы сервиса просто вызовом его в цикле, что не совсем верно.. вот вам пример, что выполнится раньше 100 подключений от разных клиентов к веб-сервису или 100раз вызов сервиса в цикле. Дело в том что Web-сервисы работают параллельно, поэтому клиенты могут коннектиться все одновременно, то есть будет затрачено 7 секунд всего на все 100подключений (в идеале, в реале наложится нагрузка на сервис при одновременном коннекте что снизит производительность), а в цикле будет ожидание вызова сервиса каждый раз, то есть 7х100 = 700 секунд
33. TODD22 18 31.05.16 16:07 Сейчас в теме
(32) AllexSoft, В цикле я смотрел за сколько у меня выгрузится 100 документов при условии что у меня например целый день не было связи. Интернет частая проблема, то кабель где нибудь порвут, то оборудование у провайдера сгорит, то профилактика то ещё что... в общем периодически бывает простой. Документы копятся... 100 документов за 220 секунд меня вполне устроят...
Буду пробовать ускорять передачу одного документа, а то 7 секунд это долго 3-4 комфортное время, а вот 7 уже долго для кассы.... у нас не супермаркет, поток не большой. Но всё же... не понятно что будет когда будут конектится по 30-50 магазинов в минуту.... с другой стороны СОМ это выдерживает...
34. TODD22 18 01.06.16 05:54 Сейчас в теме
Сделал замер производительности установки параметров сеансов.
Одна строка выполняется 69% времени и чистое время 3.1111. Чистое время в секундах показывается?
36. AllexSoft 01.06.16 10:18 Сейчас в теме
(34) TODD22, попробуй закомментировать эту строку.. ну или временно пустое значение нужного типа туда установить.. и посмотри улучшится ли скорость вызова веб-сервиса
37. TODD22 18 01.06.16 13:00 Сейчас в теме
(36) AllexSoft, Делал замер производительности. Нашёл строки которые работают долго. Потом программу закрыл. Открыл заново, и теперь больше не могу найти эти строки...
Вообще странно но у меня функция модуля сеанса выполняется 5 раз.
Не понимаю почему.... :( Первый раз когда поднимается прокси, второй раз когда отправляется документ. Потом ещё несколько раз подряд выполняется....
38. AllexSoft 01.06.16 13:04 Сейчас в теме
(37) TODD22, интересные наблюдения.. такого быть не должно по идее.. сеанс инициироваться должен только один раз, при подключении к веб-сервису клиента. Может у вас там что то с конфой? может кто то подписку при записи документа вашего залепил и вызывает что то, хотя зачем.. непонятно в общем) похоже вам за отладку садиться надо и разбираться почему у вас так
39. TODD22 18 01.06.16 16:14 Сейчас в теме
(38) AllexSoft, Конфа типовая Розница.
Подписки там может и есть какие нибудь. Но они типовые.
Завтра буду ещё крутить, смотреть....
35. TODD22 18 01.06.16 08:19 Сейчас в теме
Время передачи одного документа плавает от 6 до 9 секунд. При чём каждый раз я передаю один и тот же документ.
40. TODD22 18 02.06.16 10:41 Сейчас в теме
Ещё интересное наблюдение. Закомментировал процедуры которые долго выполнялись.... Время передачи не поменялось....
41. TODD22 18 02.06.16 11:39 Сейчас в теме
Если просто запускаю базу под тем же пользователем под которым подключаюсь то процедура установки параметров вызывается 3 раза. Если через сервис обращаюсь то 6 раз.
42. TODD22 18 08.06.16 10:58 Сейчас в теме
Попробовал закоментировать все процедуры модуля сеанса. Скорости не добавило... так и есть 6-7 секунд.
43. AllexSoft 08.06.16 11:06 Сейчас в теме
(42) TODD22, печаль какая то у вас..
44. TODD22 18 08.06.16 11:12 Сейчас в теме
(43) AllexSoft,
печаль какая то у вас..

Да вот вообще не понятная печаль... При чём всё это время если судить по отладчику уходить на подъём wsпрокси.
45. starik-2005 3037 08.06.16 11:19 Сейчас в теме
(44) А что мешает использовать жесткую ws-ссылку? Основное время при подключении уходит на чтение xsd-схемы сервиса.
46. TODD22 18 08.06.16 11:24 Сейчас в теме
(45) starik-2005, А как её сделать? Есть пример?
У меня есть готовый сервис. Выдранный из Розницы 2.2. В нём ссылка не использовалась.
47. AllexSoft 08.06.16 11:36 Сейчас в теме
(46) TODD22, там в метаданных Общие - Ws-ссылки, туда добавить он имеет ввиду и ее вызывать.. только толку это не особо прибавит (имхо), для ваших целей учета бонусов она все равно будет каждый раз новая инициализироваться в каждом документе ЧекККМ. Ну все равно попробуйте, 1% что поможет он есть )))
48. TODD22 18 08.06.16 11:59 Сейчас в теме
С WS ссылкой уже лучше. Если раньше было 6-8 секунд. То сейчас 3-6 секунд.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот