Как получить текст входящего запроса WS-соединения

1. plevakin 20.12.17 14:07 Сейчас в теме
Есть Web-сервис с входным параметром integer (http://www.w3.org/2001/XMLSchema). Если на вход подать, например текстовую строку, то на клиенте выдается ошибка "Несоответствие типов (параметр номер '1')",
а в журнале регистрации по WS-соединению есть только Сеанс.Начало, Сеанс.Аутентификация и через 20 секунд Сеанс.Завершение.
Более того, если в первой строчке процедуры Web-сервиса сделать ЗаписьЖурналаРегистрации, она не делается, т.е. до процедуры дело не доходит.
Теперь собственно вопрос, можно ли как-то в 1С получить текст некорректного запроса, или эту ошибку выдает еще WEB-сервер?
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user623969_dusa 20.12.17 14:08 Сейчас в теме
веб серверу все равно какой текст в запросе там транспортный уровень
3. plevakin 20.12.17 14:24 Сейчас в теме
(2) Тогда непонятно что не дает запуститься процедуре Web-сервиса. Возможно та самая магия, которая не позволяет работать синтаксическому контролю в модуле web-сервиса, также не дает записывать ошибки выполнения в этом модуле в журнал регистрации.
4. plevakin 20.12.17 15:05 Сейчас в теме
(2) Нет, похоже именно веб-сервер. Пульнул запрос из SOAP-UI. В журнале регистрации 1с пустота, а в SOAP-UI ответ

HTTP/1.1 500 Internal server error
Date: Wed, 20 Dec 2017 11:46:52 GMT
Server: Apache/2.2.31 (Win32) mod_auth_sspi/1.0.4 mod_ssl/2.2.31 OpenSSL/1.0.2f
Content-Length: 642
Connection: close
Content-Type: text/xml;charset=utf-8

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soap:Fault>
<faultcode>soap:Client</faultcode>
<faultstring>Неизвестная ошибка. Ошибка проверки данных XDTO:
Значение: 'кк' не соответствует простому типу: {http://www.w3.org/2001/XMLSchema}integer
по причине:
Ошибка проверки данных XDTO:
Значение: 'кк' не соответствует простому типу: {http://www.w3.org/2001/XMLSchema}integer</faultstring>
<detail/>
</soap:Fault>
</soap:Body>
</soap:Envelope>
5. plevakin 20.12.17 15:06 Сейчас в теме
(4) А хотелось бы что-то в этом духе видеть и в журнале регистрации 1С
6. necropunk 9 20.12.17 16:03 Сейчас в теме
(5) Так как вы это в журнале 1С увидите если до уровня 1С это даже не дошло?
13. starik-2005 3039 20.12.17 20:37 Сейчас в теме
(4)
Ошибка проверки данных XDTO:
Значение: 'кк' не соответствует простому типу: {http://www.w3.org/2001/XMLSchema}integer
В теге, который в пакете XDTO определен как числовой, кто-то передает "кк". Что Вы конкретно "пульнули" (xml)?
7. plevakin 20.12.17 16:41 Сейчас в теме
(7) Так я и спрашиваю, можно как-то получить текст запроса? Если ко мне летит 100 запросов в секунду с ошибкой в запросе, я хотел бы об этом знать. Ведь клиенту кто-то сообщает "Несоответствие типов (параметр номер '1')", хотелось бы иметь копию таких сообщений и на сервере.
12. Nevskiy 20.12.17 20:21 Сейчас в теме
(7) Отправляйте вторым WS при получении ошибки. И текст и саму ошибку.
8. Armando 1399 20.12.17 17:31 Сейчас в теме
Такой возможности нет. Даже в тех журнале этого не видно.
9. Xershi 1484 20.12.17 17:51 Сейчас в теме
Если клиент дурак, то причем здесь 1С, пусть вам пишет, а вы ему рекомендацию.
В апаче может такой лог и есть или какой сервис используете?
10. ArchLord42 83 20.12.17 18:25 Сейчас в теме
Как сказали выше, инфу можно получить из логов апача/ииса
11. Armando 1399 20.12.17 20:07 Сейчас в теме
(10) может заодно расскажите как сконфигурировать Apache/IIS чтоб в логе отображался текст ошибки?
14. ArchLord42 83 21.12.17 05:04 Сейчас в теме
(11)
для IIS можно написать свой обработчик на том же C#, реализовав интерфейс IHttpModule из пространства System.Web, делов на 10 минут в нем дописывать в лог тело запроса и \ или ответа
для Apache можно прикрутить прикрутить mod_dumpio, он из коробки умеет вроде писать запрос \ ответ в лог

В любом случае лог будет расти неплохо так, так что на постоянке я бы не стал этого делать, хотя для IIS в обработчике можно любое условие прописать, например при http коде > 400 писать данные, при удачных запросах не писать.

можно конечно Apache \ IIS загнать за NGINX (с поддержкой lua), там все проще, вот пример конфига

https://gist.github.com/shoeb751/84be11193ac1f3514c5eb4d70a8ba973

так же получите помимо логирования еще возможность кэширование развернуть, если у вас действительно
Если ко мне летит 100 запросов в секунду с ошибкой в запросе

этим хорошо можно снизить нагрузку на 1Ску
vv2; Armando; +2 Ответить
15. PythonJ 117 18.10.21 11:37 Сейчас в теме
Элементарно. Воткните вместо web-сервиса http-сервис, а оттуда сквозняком отправляйте запрос себе же на веб-сервис с тем же телом и заголовками. И также обратно. Если веб-сервис вернул ошибку, то перед пересылкой данных на клиента, сохраняйте в лог исходный запрос и заголовки. Только не советую такой лог в базе хранить.
Оставьте свое сообщение

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