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

в 1С есть асинхронные HTTP запросы?

в 1С есть асинхронные HTTP запросы?
Я
   novichok79
 
12.12.18 - 09:55
Доброго времени суток, уважаемые специалисты.
Вчера дали REST API к одному из сервисов, которые у нас тут развернуты. При отправке POST запроса на ресурс, 1С виснет и отваливается по тайм-ауту. COMОбъект("WinHttp.WinHttpRequest.5.1") делает асинхронный вызов, возвращает управление по тайм-ауту после WaitForResponse, но не дает прочитать ResponseText, COMОбъект("Msxml2.ServerXMLHTTP.6.0") ведет себя аналогично COMОбъект("WinHttp.WinHttpRequest.5.1"), у него есть свойство ReadyState, которое по прошествии тайм-аута устанавливается в 3, то есть данные есть, чтение продолжается, но прочитать ResponseText также не удается.
Есть ли в 1С возможность делать асинхронные HTTP запросы? Подскажите, в сторону какого решения двигаться. Заранее благодарю за помощь.
 
 
   Garykom
 
1 - 12.12.18 - 09:59
Например в сторону js или .net из 1С
   novichok79
 
2 - 12.12.18 - 10:00
(1) а каким образом вызвать оно из регламентного задания? т. е. с сервера?
   mszsuz
 
3 - 12.12.18 - 10:04
cURL + фоновые задания ?
   novichok79
 
4 - 12.12.18 - 10:08
(3) ну такое ))) костылёк получается, то есть типа
КомандаСистемы("curl http://www.kakayatohueta.ru --output response.txt")?
postman вчера тоже захлебнулся, а потом выплюнул response на 5 мб.
   Василий Алибабаевич
 
5 - 12.12.18 - 10:34
(0) Я бы попробовал WinHttpRequest. И привязаться к его событию "OnResponseFinished".
   novichok79
 
6 - 12.12.18 - 10:36
(5) а если response не finished? а данные прочитать надо?
   Василий Алибабаевич
 
7 - 12.12.18 - 10:39
(6) А вот это фиг его знает. Где оно хранит РеспонзБоди и есть ли к нему доступ пока не финишед - я ХЗ.
   novichok79
 
8 - 12.12.18 - 10:41
(7) вся проблема то как раз и была при использовании winhttprequest, что ни responsebody, ни responsetext не доступны для чтения из 1С при выполнении waitforresponse (когда он возвращает флаг, что request еще не finished)
   Василий Алибабаевич
 
9 - 12.12.18 - 10:49
(8) А так кто-то вообще может? Пока не тебе не сказали, что все данные приняты - как знать сколько их принято вообще? Возможно что "0".
Я думал проблема в асинхронности. Что типа нужно цикл в 1С крутить пока не finished. Так оно не нужно. Отправил запрос. Сказал 1с :
[Code]
ДобавитьОбработчик Requestor.OnResponseFinished, ОбработатьОтвет()
[Code]
и продолжил работу.

Когда настанет Requestor райзонет OnResponseFinished 1С начнет ОбработатьОтвет(). Вот вам и асинхронность.

А оно оказывается нужно получать ответ частями...
   novichok79
 
10 - 12.12.18 - 11:25
(9) так я ж про это и пишу...
 
 Рекламное место пустует
   Скиурус
 
11 - 12.12.18 - 11:35
В 1С есть возможность все что угодно запустить асинхронно. Создаешь фоновое задание, в нем получаешь свои данные с помощью стандартных методов. По поводу таймаута, у HTTPСоединение есть свойство Таймаут - можешь выставить сколько тебе надо. А вообще задумайся о том, чтобы как-то ограничить свои запросы - сильно нагружать REST сервер не есть правильно, лучше разбить на несколько меньших запросов.
   Garykom
 
12 - 12.12.18 - 11:46
(2) nodejs или ВК типа Ъ с сервера
   novichok79
 
13 - 12.12.18 - 12:37
(11) да ну? по таймауту оно вываливается в исключение, и не возвращает никакого httpответа
   novichok79
 
14 - 12.12.18 - 12:38
тут другая проблема- запуститьприложение тупит, в cmd строка вызова curl работает норм, читает поток, а через запуститьприложение с ожиданием завершения весит систему
   novichok79
 
15 - 12.12.18 - 13:09
(14) положение спас вызов WScript.Shell, другое дело, что решение становится полностью платформозависимым, а это отстойно.
   oleg_km
 
16 - 12.12.18 - 18:24
(15) А с "Msxml2.ServerXMLHTTP.6.0" было платформонезависимо?
   Garykom
 
17 - 12.12.18 - 18:28
   yavasya
 
18 - 12.12.18 - 18:35
(0) Нельзя фоновым заданием сделать ? оно будет независимо выполняться
   novichok79
 
19 - 12.12.18 - 21:38
(16) да, но какая разница, если оно не работает нормально в 1С?
   novichok79
 
20 - 12.12.18 - 21:40
(17) как вариант, но в итоге через curl получается в 2 раза медленнее, чем предлагаемый REST API от самой помойки сообщений. так что, в жопу curl.
   novichok79
 
21 - 12.12.18 - 21:41
(18) ха, я ж говорю что дело не в фоновом задании, а в том что HTTP запрос не перестает выполняться, если делать его не через cURL. а через cURL получается и сфетчить набор сообщений, и прервать запрос.
   novichok79
 
22 - 12.12.18 - 21:46
(17) спасибо за подгон
   oleg_km
 
23 - 12.12.18 - 21:59
(17) О, в ход пошла тяжелая артиллерия.
   Cyberhawk
 
24 - 12.12.18 - 22:01
Мультипарт же из коробки начиная с 8.3.8 какой-то там
   novichok79
 
25 - 13.12.18 - 00:34
(24) ну вот в 8.3.10 не завезли походу
   sergeyspb13
 
26 - 13.12.18 - 00:35
смотри как директБанк работает.... в УТ11 там все асинхронно забирает платежки и раскидывает
   novichok79
 
27 - 13.12.18 - 10:09
(26) это типа так, да?

АдресСервера = "https://directbank.1c.ru/downloads/bankslist.mxl";;
    
ПараметрыПолучения = Новый Структура;
ПараметрыПолучения.Вставить("Таймаут", 60);
    
Результат = ПолучениеФайловИзИнтернета.СкачатьФайлВоВременноеХранилище(АдресСервера, ПараметрыПолучения);
   novichok79
 
28 - 13.12.18 - 10:09
вызвать функцию БСП и прикрутить регламент большого ума не надо.


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