|
в 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
|
вызвать функцию БСП и прикрутить регламент большого ума не надо.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |