Вход | Регистрация
 

Логирование SOAP веб-сервиса на стороне 1С

Логирование SOAP веб-сервиса на стороне 1С
Я
   anchar007
 
06.08.19 - 14:29
Всем привет!
В 1С приходят запросы от внешних источников на создание каких-нибудь документов.
Подскажите какие-нибудь оптимальные способы логирования всех водящих запросов и желательно ответов от 1С
 
 
   rsv
 
1 - 06.08.19 - 14:31
(0) если копнуть в сторону логов веб сервера ?Там
Должно быть все
   palsergeich
 
2 - 06.08.19 - 14:31
(0) делай на стороне 1с не веб сервис, а http, тогда ты сможешь сохранять все запросы, в том числе и не валидные.
SOAP это частный случай http.
Фабрика уже есть, проблем быть не должно
   rsv
 
3 - 06.08.19 - 14:34
+(1)  текстовики как бы есть . Нужен доступ и парсинг
   anchar007
 
4 - 06.08.19 - 14:37
(2) имею дело с уже готовым веб-сервисом. Пытаюсь понять как получить входящий xdto и сохранить хотя бы в xml
   palsergeich
 
5 - 06.08.19 - 14:38
Если надо вообще всё, тогда (1) , если то что прошло авторизацию, то достаточно (2)
ИМХО в (2) реализация попроще чем (1)
   palsergeich
 
6 - 06.08.19 - 14:38
(4) через Записьxml
   anchar007
 
7 - 06.08.19 - 14:39
(1) сервер на линуксе, хочется более доступных логов
   palsergeich
 
8 - 06.08.19 - 14:39
(4) но есть тонкий ньюанс, если сообщение невалидно, то до модуля webсервиса ты не дойдешь и отлуп будет дан раньше и в логах этого не будет
   anchar007
 
9 - 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.Закрыть();
   anchar007
 
10 - 06.08.19 - 14:42
но ПакетXDTO не сохраняется в XML
   Cyberhawk
 
11 - 06.08.19 - 14:44
На стороне 1С как поставщика веб-сервиса никак не залогируешь
   AquaMan
 
12 - 06.08.19 - 14:50
(0) Регистр сведений отдельный самое простое.
   anchar007
 
13 - 06.08.19 - 14:58
(12) во входных данных может быть очень много информации. Например по счету клиенту помимо реквизитов Организация, Контрагент, Договор, СуммаДокумента еще и табличная часть передаётся. А строк в табличной части может быть очень много. Как это всё в регистр сведений записать, чтоб еще и наглядно было?

Я планирую в XML файлах сохранять, чтобы в будущем можно было использовать какие-нибудь сервисы для анализа логов
   AquaMan
 
14 - 06.08.19 - 15:02
(13) Строка неограниченной длинны, туда Json или Xml, все работает - проблем нет. Если отдельно, то лучше в текстовый файл, его потом скормить ELK, но это оверинженирг в данном случае, скорее всего.
   anchar007
 
15 - 06.08.19 - 15:05
(14) тогда опять же как получить все входящие параметры одним пакетом и записать в JSON или XML?
   nicxxx
 
16 - 06.08.19 - 15:06
(14) ХранилищеЗначения будет компактней
   anchar007
 
17 - 06.08.19 - 15:07
(13) Можно конечно брать и каждое значение по отдельности записывать в XML в цикле. Тогда для каждой функции веб-сервиса будет своя функция сохранения логов. Это же жесть
   AquaMan
 
18 - 06.08.19 - 15:22
(16) Строковые удобнее анализировать.
(17) Функция сохранения одна, которая вызывается из каждого сервиса с разными параметрами, параметры для сохранения в виде структуры передаешь, например.
   Вафель
 
19 - 06.08.19 - 15:23
лучше в отдельную базу, чтоб не засорять
   anchar007
 
20 - 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.Закрыть();
        
КонецФункции

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