Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Обработка POST-запроса HTTP-сервисом

Обработка POST-запроса HTTP-сервисом
Я
   OpKc
 
24.04.19 - 06:51
Доброго времени суток!

Настраиваю обработку веб-хуков стороннего сервиса (Calltouch) с помощью HTTP-сервиса.
В качестве веб-сервера выступает Apache 2.2, http-сервис опубликован.

Платформа 8.3.12.1714.
Настройки опубликованного сервиса из *.vrd-файла:
<?xml version="1.0" encoding="UTF-8"?>
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system";
        xmlns:xs="http://www.w3.org/2001/XMLSchema";
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
        base="/MyInfoBase"
        ib="Srvr=&quot;ServerName:1841&quot;;Ref=&quot;MyInfoBase&quot;;usr=UserName;pwd=UserPassword;">
    <httpServices publishByDefault="false">
        
        <service name="calltouch"
                rootUrl="calltouch"
                enable="true"
                reuseSessions="autouse"
                sessionMaxAge="20"
                poolSize="10"
                poolTimeout="10"/>
    </httpServices>
    <standardOdata enable="true"
            reuseSessions="autouse"
            sessionMaxAge="20"
            poolSize="10"
            poolTimeout="10"/>
</point>

GET-запрос отрабатывает нормально.

С POST-запросом возникает следующая проблема:
если на сервере 1С остался активный сеанс пользователя UserName, под которым работает http-сервис, то запрос отрабатывает корректно. Если же сеанса нет (например, завершился по таймауту)- то при отправке запроса происходит аутентификация этого пользователя (видно по ЖР), но сам запрос при этом не отрабатывает (метод, отвечающий за обработку запроса даже не вызывается).

Таким образом, каждый раз после завершения сеанса пользователя http-сервиса я гарантированно теряю один запрос.

Пробовал выключать использование Odata (в результате поведение не изменялось).
Пробовал изменять значение параметра reuseSessions в ноде service:
для значения dontuse в ЖР вижу создание сеанса, завершение сеанса, аутентификацию пользователя (именно в таком порядке) в течение одной секунды. Обработки запроса не происходит.
для значения use не происходит совсем ничего (со стороны клиента нет вижу настроек, определяющих режим использования сессий, соответственно, сервер не получает нужные ему параметры).

В какую сторону копать? Что-то не так с настройкой публикации http-сервиса или это какая-то фича?
 
 
   ViSo76
 
1 - 24.04.19 - 07:45
В сторону 3-х звенки и дебага web-сервисов в 1с
   palsergeich
 
2 - 24.04.19 - 08:51
Подожди, просто так потерять не можешь, что то да возвращается, пусть даже не то, что ты ждешь.
Посмотри что конкретно в заголовках и теле ответа на пропавший  запрос.
Там какой нибудь код 3xx
   Bodrug
 
3 - 24.04.19 - 09:46
Может с авторизацией трабл?
Попробуй в vrd вместо 
ib="Srvr=&quot;ServerName:1841&quot;;Ref=&quot;MyInfoBase&quot;;usr=UserName;pwd=UserPassword;">
ib="Srvr=&quot;ServerName:1841&quot;;Ref=&quot;MyInfoBase&quot;;Usr=&quot;UserName&quot;;Pwd=&quot;UserPassword&quot;;">
   Bodrug
 
4 - 24.04.19 - 09:48
Еще можно через Postman отправить POST-запрос. Увидишь, что тебе возвращается.
   OpKc
 
5 - 24.04.19 - 09:57
Всем ответившим (может, неправильно объяснил) - серверной частью являюсь я, запрос отправляет calltouch.

(1) не пойму, как дебажить, если в обработчик метода POST отладка даже не попадает.
(2) со стороны calltouch я вижу только сообщение "Указанный адрес обработчика не отвечает". Пробовал вместо http-ответа 200 в случае успеха подсовывать ему 400 или 402, чтобы проверить, будет ли отличаться текст ошибки - выдаёт "Указанный адрес обработчика не отвечает". Т.е. я вообще со стороны calltouch не вижу даже примерную причину ошибки.
(3) вторая точка с запятой не помогла, ошибка та же


В процессе тестирования GET-запрос начал вести себя точно так же, как и POST. Возможно, это было с самого начала, но я не заметил.
   OpKc
 
6 - 24.04.19 - 10:02
(4) Гениально! Вижу причину ошибки в коде, исполняемом при начале сеанса. Пошёл отлаживать. Спасибо огромное.

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