Есть Web-сервис с входным параметром integer (http://www.w3.org/2001/XMLSchema). Если на вход подать, например текстовую строку, то на клиенте выдается ошибка "Несоответствие типов (параметр номер '1')",
а в журнале регистрации по WS-соединению есть только Сеанс.Начало, Сеанс.Аутентификация и через 20 секунд Сеанс.Завершение.
Более того, если в первой строчке процедуры Web-сервиса сделать ЗаписьЖурналаРегистрации, она не делается, т.е. до процедуры дело не доходит.
Теперь собственно вопрос, можно ли как-то в 1С получить текст некорректного запроса, или эту ошибку выдает еще WEB-сервер?
(2) Тогда непонятно что не дает запуститься процедуре Web-сервиса. Возможно та самая магия, которая не позволяет работать синтаксическому контролю в модуле web-сервиса, также не дает записывать ошибки выполнения в этом модуле в журнал регистрации.
(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>
(7) Так я и спрашиваю, можно как-то получить текст запроса? Если ко мне летит 100 запросов в секунду с ошибкой в запросе, я хотел бы об этом знать. Ведь клиенту кто-то сообщает "Несоответствие типов (параметр номер '1')", хотелось бы иметь копию таких сообщений и на сервере.
(11)
для IIS можно написать свой обработчик на том же C#, реализовав интерфейс IHttpModule из пространства System.Web, делов на 10 минут в нем дописывать в лог тело запроса и \ или ответа
для Apache можно прикрутить прикрутить mod_dumpio, он из коробки умеет вроде писать запрос \ ответ в лог
В любом случае лог будет расти неплохо так, так что на постоянке я бы не стал этого делать, хотя для IIS в обработчике можно любое условие прописать, например при http коде > 400 писать данные, при удачных запросах не писать.
можно конечно Apache \ IIS загнать за NGINX (с поддержкой lua), там все проще, вот пример конфига
Элементарно. Воткните вместо web-сервиса http-сервис, а оттуда сквозняком отправляйте запрос себе же на веб-сервис с тем же телом и заголовками. И также обратно. Если веб-сервис вернул ошибку, то перед пересылкой данных на клиента, сохраняйте в лог исходный запрос и заголовки. Только не советую такой лог в базе хранить.