[РЕШЕНО] http-сервис, фоновые задания, 8.3

Тема в разделе ""1C:Web-Сервер"", создана пользователем redcrab, 26 ноя 2015.

  1. TopicStarter Overlay
    redcrab
    Offline

    redcrab Новичок в 1С

    Регистрация:
    30 мар 2015
    Сообщения:
    12
    Симпатии:
    2
    Баллы:
    4
    Доброго времени суток.

    Ситуация следующая:
    0. База файловая
    1. Опубликовала http-сервис
    2. Получаю на него POST запрос, обрабатываю, все нормально:
    Код:
    Функция URLBotPOST(Запрос)
        Сообщение = Запрос.ПолучитьТелоКакСтроку();  
    МояПроцедура(Сообщение);
        Ответ = Новый HTTPСервисОтвет(200);
        Возврат Ответ;
    КонецФункции
    
    3. Сторонний сервер, который посылает мне запрос, ждет 200-го ответа только 60 секунд, если 200 не получен, то сообщение будет отправляться вновь и вновь. Повлиять я на это не могу. Только для меня никто переделывать ничего не будет.

    4. Так вот, если "МояПроцедура(Сообщение);" выполняется за время до 60 сек. то все нормально. Но проблема в том, что мне необходимо и более долгие действия. А овтет 200 отправляется только после завершения "МояПроцедура(Сообщение);"

    Выход:
    1. Ассинхронно выполнить "МояПроцедура(Сообщение);" и не дожидаясь результат выполнить
    Ответ = Новый HTTPСервисОтвет(200);
    Возврат Ответ;
    То есть запустить фоновое задание, но на http-сервисе не стартует "Менеджер заданий", ошибка: "Менеджер заданий не запущен"
    2. Сначала отправить статус 200, а потом выполнять свои процедуры и функции. но статус 200 можно отправить только как Возврат в обработчике POST запроса. Или нет?

    Может есть способ сначала отправить ответ серверу который посылает POST запрос?
    Или как на http-сервисе при файловой базе запустить фоновое задание?

    П.С.
    Фоновое задание запускаю так:
    Код:
    ФоновыеЗадания.Выполнить("МояФункция.Инициализация", Параметры1, новый УникальныйИдентификатор, "Моя Функция");
    В реузльтате ошибка: "Ошибка при вызове метода контекста (Выполнить): Менеджер заданий не активен. "




    UPD

    Решение:

    По умолчанию, 1с публикует файл default.vrd. В нем есть такая строка:

    Код:
    <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="/Bot"
            ib="File=&quot;E:\BASE_1S\Trade&quot;;Usr=&quot;********&quot;;Pwd=&quot;***************;"
            enable="false">
    меняем параметр enable="false" на true и фоновые задания начинают работать.
    Последнее редактирование: 27 ноя 2015
    X@ndr нравится это.
  2. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    А какой вы собираетесь посылать ответ, не зная вопроса ???
  3. TopicStarter Overlay
    redcrab
    Offline

    redcrab Новичок в 1С

    Регистрация:
    30 мар 2015
    Сообщения:
    12
    Симпатии:
    2
    Баллы:
    4
    Мне вообще без разницы вопрос, он либо игнорируется, либо обрабатывается, это в моей процедуре выполняются проверки, мне только нужно отправить
    Ответ = Новый HTTPСервисОтвет(200); т.е. сообщить серверу, что запрос получен, а какой запрос - неважно, это потом обрабатывается. Главное сообщить серверу-отправителю, что запрос получен - 200 ОК. Чтобы не возникало повторной отправки одного и того же сообщения
    --- Объединение сообщений, 26 ноя 2015 ---
    И серверу, который отправил запрос, это тоже неважно. Он только ждет ответа со статусом 200. Т.е. он просто запускает определенные действия в 1с.
    Последнее редактирование: 26 ноя 2015
  4. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    отвечу, насколько понял суть проблемы:

    Если 200-ый ответ для удаленной стороны означаетконечное состояние полученной информации, то вам ничего не остается, как выполнять свою процедуру/функцию за отведенное на это время удаленной стороной, т.е. эти 60 секунд, ибо после получения ответа удаленная сторона будет либо пытаться обработать ответ, которого не будет(вы будете отправлять пустышку), либо отвалится по тайм-ауту.
  5. TopicStarter Overlay
    redcrab
    Offline

    redcrab Новичок в 1С

    Регистрация:
    30 мар 2015
    Сообщения:
    12
    Симпатии:
    2
    Баллы:
    4
    Верно, если отвалится по тайм-ауту, т.е. не получит ответа в течение 60 сек., то будет повторно пытаться отправить этот запрос, что неприемлемо. Тайм-аут = 60сек. Ответ = Заголовок со статусом 200:
    Ответ = Новый HTTPСервисОтвет(200);

    Но мне для некоторых операций необходимо более 60сек
  6. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    Так как реагирует удаленная сторона на 200-ый ответ в ее сторону?
    Предполагаю, что необходимо сделать отдельные функции для отправления ответа 200 и ответа как результата обработки запроса.

    Т.е. удаленная сторона посылает запрос типа "ping", 1С ей отвечает 200-ым ответом, удаленная стороная получая 200-ый ответ, понимает, что 1С готова с ней общаться и посылает запрос для обработки и ждет гораздо дольше 60 секунд.
    --- Объединение сообщений, 26 ноя 2015 ---
    С фоновыми заданиями в файловом варианте - все плохо, думаю, вам придется таки использовать клиент-сервер, если вариант с запрос-ответ_200-запрос_данных-ответ_данные не может существовать.....
    Последнее редактирование: 26 ноя 2015
  7. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Ну и чего вы хотите? (отходя в сторону - возвращать 200, если на самом деле это нефига не успешное выполнение - не правильно, но это ладно).

    Не особый специалист в таком взаимодействии, но варианта 2:
    1) либо увеличиваете таймаут
    2) либо меняете архитектуру всего взаимодействия, чтобы было несколько запросов: после первого запроса вы возвращаете клиенту какой-нибудь id сессии и код 200, после этого клиент долбит вас периодическими запросами с этим id, пока ваш сервис не разродится, и не вышлет результат. Но это сложнее чем первый вариант, это же надо клиент переписывать. Как же это реализовывать, если вы там даже просто таймаут поменять не можете.
    --- Объединение сообщений, 26 ноя 2015 ---
    Ну пошлите в ответ 102, может клиент умный и rfc следует, и что-то выгорит. Но я бы не надеялся.
  8. TopicStarter Overlay
    redcrab
    Offline

    redcrab Новичок в 1С

    Регистрация:
    30 мар 2015
    Сообщения:
    12
    Симпатии:
    2
    Баллы:
    4
    я повторюсь: я никак не могу повлиять на сервер, который посылает запрос, это сторонний сервер. Он работает только в данном режиме. Для меня там никто ничего не будет менять.От меня там ничего не зависит.

    Мне либо надо запустить фоновоЕ задание на Web сервисе, либо как-то вернуть заголовок со статусом 200 до завершения обработчика post запроса. Оба варианта я не знаю как сделать. (база файловая)
    --- Объединение сообщений, 26 ноя 2015 ---
    удаленная сторона, при получении 200-го отмечает данное сообщение как прочитаное
  9. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    перечитал все еще раз.
    я кажется понял в чем проблема.
    --- Объединение сообщений, 26 ноя 2015 ---
    ща подумаю.
    --- Объединение сообщений, 26 ноя 2015 ---
    Подождите, у вас же 8.3.
    В 8.3 файловой вроде не нужно специальных плясок, тем более у вас веб-сервер запущен, т.е. в базе я так понимаю вообще нет необходимости чтобы кто-то сидел чтобы фоновое можно было запустить.

    Единственно вопрос: конфигурация какая? Режим совместимости включен или нет?
    Последнее редактирование: 26 ноя 2015
  10. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    И еще: полностью версия платформы какая?
  11. TopicStarter Overlay
    redcrab
    Offline

    redcrab Новичок в 1С

    Регистрация:
    30 мар 2015
    Сообщения:
    12
    Симпатии:
    2
    Баллы:
    4
    Версия платформы: 8.3.5.1482
    Версия конфигурации: Управление торговлей, редакция 11.1 (11.1.10.94)


    то есть по сути мне надо асинхронно выполнить функцию в обработчике post запроса

    про режим затрудняюсь ответить.

    опубликован http сервис.

    фоновоЕ задание не стартует, ошибка "менеджер заданий не запущен"
  12. TODD22
    Offline

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.755
    Симпатии:
    146
    Баллы:
    104
    Попробуйте сделать специального пользователя для обменов. Который будет в базе всегда. И посмотрите с этим пользователем регламентное задание выполнится или нет.
  13. TopicStarter Overlay
    redcrab
    Offline

    redcrab Новичок в 1С

    Регистрация:
    30 мар 2015
    Сообщения:
    12
    Симпатии:
    2
    Баллы:
    4
    невыходит так
  14. TopicStarter Overlay
    redcrab
    Offline

    redcrab Новичок в 1С

    Регистрация:
    30 мар 2015
    Сообщения:
    12
    Симпатии:
    2
    Баллы:
    4
    если с клиента запускать, то оно конечно выполняется, а вот с http сервиса нет
  15. TopicStarter Overlay
    redcrab
    Offline

    redcrab Новичок в 1С

    Регистрация:
    30 мар 2015
    Сообщения:
    12
    Симпатии:
    2
    Баллы:
    4
    Решила!!!!

    По умолчанию, 1с публикует файл default.vrd. В нем есть такая строка:

    Код:
    <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="/Bot"
            ib="File=&quot;E:\BASE_1S\Trade&quot;;Usr=&quot;********&quot;;Pwd=&quot;***************;"
            enable="false">
    меняем параметр enable="false" на true и фоновые задания начинают работать.

    Огромное всем спасибо за помощь!
    alexburn нравится это.
  16. TopicStarter Overlay
    redcrab
    Offline

    redcrab Новичок в 1С

    Регистрация:
    30 мар 2015
    Сообщения:
    12
    Симпатии:
    2
    Баллы:
    4
    И кстати, одно наблюдение. Процедуры, на выполнение которых требовалось более 60 секунд в фоне выполняются за 15-20 секунд.
Похожие темы
  1. mavr7963
    Ответов:
    12
    Просмотров:
    4.464
  2. 1c-ka
    Ответов:
    1
    Просмотров:
    386
Загрузка...

Поделиться этой страницей