Имя: Пароль:
1C
1С v8
Обработка POST-запроса HTTP-сервисом
0 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-сервиса или это какая-то фича?
1 ViSo76
 
24.04.19
07:45
В сторону 3-х звенки и дебага web-сервисов в 1с
2 palsergeich
 
24.04.19
08:51
Подожди, просто так потерять не можешь, что то да возвращается, пусть даже не то, что ты ждешь.
Посмотри что конкретно в заголовках и теле ответа на пропавший  запрос.
Там какой нибудь код 3xx
3 Bodrug
 
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;;">
4 Bodrug
 
24.04.19
09:48
Еще можно через Postman отправить POST-запрос. Увидишь, что тебе возвращается.
5 OpKc
 
24.04.19
09:57
Всем ответившим (может, неправильно объяснил) - серверной частью являюсь я, запрос отправляет calltouch.

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


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