|
Логирование SOAP веб-сервиса на стороне 1С | ☑ | ||
---|---|---|---|---|
0
anchar007
06.08.19
✎
14:29
|
Всем привет!
В 1С приходят запросы от внешних источников на создание каких-нибудь документов. Подскажите какие-нибудь оптимальные способы логирования всех водящих запросов и желательно ответов от 1С |
|||
1
rsv
06.08.19
✎
14:31
|
(0) если копнуть в сторону логов веб сервера ?Там
Должно быть все |
|||
2
palsergeich
06.08.19
✎
14:31
|
(0) делай на стороне 1с не веб сервис, а http, тогда ты сможешь сохранять все запросы, в том числе и не валидные.
SOAP это частный случай http. Фабрика уже есть, проблем быть не должно |
|||
3
rsv
06.08.19
✎
14:34
|
+(1) текстовики как бы есть . Нужен доступ и парсинг
|
|||
4
anchar007
06.08.19
✎
14:37
|
(2) имею дело с уже готовым веб-сервисом. Пытаюсь понять как получить входящий xdto и сохранить хотя бы в xml
|
|||
5
palsergeich
06.08.19
✎
14:38
|
Если надо вообще всё, тогда (1) , если то что прошло авторизацию, то достаточно (2)
ИМХО в (2) реализация попроще чем (1) |
|||
6
palsergeich
06.08.19
✎
14:38
|
(4) через Записьxml
|
|||
7
anchar007
06.08.19
✎
14:39
|
(1) сервер на линуксе, хочется более доступных логов
|
|||
8
palsergeich
06.08.19
✎
14:39
|
(4) но есть тонкий ньюанс, если сообщение невалидно, то до модуля webсервиса ты не дойдешь и отлуп будет дан раньше и в логах этого не будет
|
|||
9
anchar007
06.08.19
✎
14:41
|
(6) загвоздка в том что именно записывать?
Пробовал сделать так: ПакетXDTO = ФабрикаXDTO.Пакеты.Получить("http://client.ibc.ru/DocumentSet"); ИмяФайла = ПолучитьИмяВременногоФайла("XML"); МойXML = Новый ЗаписьXML; ПараметрыЗаписиXML = Новый ПараметрыЗаписиXML("UTF-8", "1.0", Ложь); МойXML.ОткрытьФайл(ИмяФайла, ПараметрыЗаписиXML); МойXML.ЗаписатьОбъявлениеXML(); ФабрикаXDTO.ЗаписатьXML(МойXML, ПакетXDTO.КорневыеСвойства); МойXML.Закрыть(); |
|||
10
anchar007
06.08.19
✎
14:42
|
но ПакетXDTO не сохраняется в XML
|
|||
11
Cyberhawk
06.08.19
✎
14:44
|
На стороне 1С как поставщика веб-сервиса никак не залогируешь
|
|||
12
AquaMan
06.08.19
✎
14:50
|
(0) Регистр сведений отдельный самое простое.
|
|||
13
anchar007
06.08.19
✎
14:58
|
(12) во входных данных может быть очень много информации. Например по счету клиенту помимо реквизитов Организация, Контрагент, Договор, СуммаДокумента еще и табличная часть передаётся. А строк в табличной части может быть очень много. Как это всё в регистр сведений записать, чтоб еще и наглядно было?
Я планирую в XML файлах сохранять, чтобы в будущем можно было использовать какие-нибудь сервисы для анализа логов |
|||
14
AquaMan
06.08.19
✎
15:02
|
(13) Строка неограниченной длинны, туда Json или Xml, все работает - проблем нет. Если отдельно, то лучше в текстовый файл, его потом скормить ELK, но это оверинженирг в данном случае, скорее всего.
|
|||
15
anchar007
06.08.19
✎
15:05
|
(14) тогда опять же как получить все входящие параметры одним пакетом и записать в JSON или XML?
|
|||
16
nicxxx
06.08.19
✎
15:06
|
(14) ХранилищеЗначения будет компактней
|
|||
17
anchar007
06.08.19
✎
15:07
|
(13) Можно конечно брать и каждое значение по отдельности записывать в XML в цикле. Тогда для каждой функции веб-сервиса будет своя функция сохранения логов. Это же жесть
|
|||
18
AquaMan
06.08.19
✎
15:22
|
(16) Строковые удобнее анализировать.
(17) Функция сохранения одна, которая вызывается из каждого сервиса с разными параметрами, параметры для сохранения в виде структуры передаешь, например. |
|||
19
Вафель
06.08.19
✎
15:23
|
лучше в отдельную базу, чтоб не засорять
|
|||
20
anchar007
06.08.19
✎
16:42
|
(18) Спасибо! Сделал почти так, но всё-таки в отдельные xml файлы. Моя проблема была в том, что я думал, что можно ко всем входным параметрам обратиться как к какой-то одной структуре и её целиком записать в xml. Но всё-таки нужно записывать каждый входной параметр в xml отдельно.
Мое решение, может кому пригодится: В функции веб-сервиса создаю массив входных переменных: Функция CreateDocument(DocumentSet,ID,DocumentObjects) МассивВходныхПараметров = Новый Массив; МассивВходныхПараметров.Добавить(DocumentSet); МассивВходныхПараметров.Добавить(ID); МассивВходныхПараметров.Добавить(DocumentObjects); ЗаписатьСтруктуруПараметров(МассивВходныхПараметров); КонецФункции Функция записи лога входных данных: Функция ЗаписатьСтруктуруПараметров(ВходящиеПараметры) ИмяФайла = ПолучитьИмяВременногоФайла("XML"); ЗаписьXML = Новый ЗаписьXML; ПараметрыЗаписиXML = Новый ПараметрыЗаписиXML("UTF-8", "1.0", Ложь); ЗаписьXML.ОткрытьФайл(ИмяФайла, ПараметрыЗаписиXML); ЗаписьXML.ЗаписатьОбъявлениеXML(); ЗаписьXML.ЗаписатьНачалоЭлемента("Root"); Для каждого элемент из ВходящиеПараметры Цикл ЗаписьXML.ЗаписатьНачалоЭлемента("Parametr"); Если ТипЗнч(элемент) = ТИП("ОбъектXDTO") Тогда ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, элемент); Иначе ЗаписатьXML(ЗаписьXML, элемент, НазначениеТипаXML.Явное); КонецЕсли; ЗаписьXML.ЗаписатьКонецЭлемента(); КонецЦикла; ЗаписьXML.ЗаписатьКонецЭлемента(); ЗаписьXML.Закрыть(); КонецФункции |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |