Имя: Пароль:
1C
1С v8
в 1С есть асинхронные HTTP запросы?
,
0 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 запросы? Подскажите, в сторону какого решения двигаться. Заранее благодарю за помощь.
1 Garykom
 
гуру
12.12.18
09:59
Например в сторону js или .net из 1С
2 novichok79
 
12.12.18
10:00
(1) а каким образом вызвать оно из регламентного задания? т. е. с сервера?
3 mszsuz
 
12.12.18
10:04
cURL + фоновые задания ?
4 novichok79
 
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".
6 novichok79
 
12.12.18
10:36
(5) а если response не finished? а данные прочитать надо?
7 Василий Алибабаевич
 
12.12.18
10:39
(6) А вот это фиг его знает. Где оно хранит РеспонзБоди и есть ли к нему доступ пока не финишед - я ХЗ.
8 novichok79
 
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С начнет ОбработатьОтвет(). Вот вам и асинхронность.

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

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