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