Имя: Пароль:
1C
1C 7.7
v7: Задержки при получении ответа на запрос
,
0 brenli
 
18.12.19
14:26
Всем добра.
Пытаюсь получить ответ на запрос, но все проходит очень долго.
Т.е при выполнении какого либо задания и попытки получить ответ, проходит несколько секунд.

Запрос = "http://127.0.0.1:16732/requests/"+UID;
WinHttpRequest = СоздатьWinHttpRequest(Запрос ,"GET");    
//    WinHttpRequest.SetTimeouts(1,1,1,1);
WinHttpRequest.send();
Сообщить(" "+WinHttpRequest.ResponseText);

Что не так?
Пытался устанавливать таймаут - все точно так же.
1 mistеr
 
18.12.19
14:27
(0) А через браузер как?
2 Kigo_Kigo
 
18.12.19
14:55
А замер производительности что говорит?
Можно поиграться разными версиями WinHttp, но ИМХО проблема не ней и не в 1с, а настройках соеденения
3 brenli
 
18.12.19
15:09
(1) Через браузер быстро. Моментально
4 brenli
 
18.12.19
15:09
(2) Замер между чем и чем?
5 brenli
 
18.12.19
15:14
http://127.0.0.1:16732/requests/018BB296-9F0B-49F4-8F6E-6B27D74C9E60    
{"results":[{"result":null,"errorDescription":"","errorCode":0,"status":"inProgress"}]}    
http://127.0.0.1:16732/requests/018BB296-9F0B-49F4-8F6E-6B27D74C9E60    
{"results":[{"result":null,"errorDescription":"Порт недоступен","errorCode":4,"status":"error"}]}  

Между этими записями разница секунд в 15
6 brenli
 
18.12.19
15:15
Хочу уточнить. Соединение в этот момент не висит. 1с не висит.
Просто сначала идут пустые ответы, а спустя ~15 секунд с данными.
7 brenli
 
18.12.19
15:23
(1) Я ошибся. Через браузер точно так же.
8 Kigo_Kigo
 
18.12.19
15:24
что то не так в запросе, у вас порт не доступен, зависает в таймауте ответа
9 brenli
 
18.12.19
15:27
(8) А потом выдает.
И в статусе пишет inProgress
10 brenli
 
18.12.19
15:28
+(9)  Запрос элементарный "http://127.0.0.1:16732/requests/"+UID;
11 Kigo_Kigo
 
18.12.19
15:50
(10) Короче у меня такая же шляпа, если в запросе что то не так или json кривой, то ответ 15-20 сек, если все верно - то моментально, копайте в этом направлении, либо в запросе, либо в самом хттп серваке в приемке/обработке запроса
12 mistеr
 
18.12.19
18:09
(7) К 1С вопросы еще есть?
13 brenli
 
19.12.19
09:44
(12) Да.
Добился все работает быстро, но из 1с все равно вываливается пустой ответ.
Выполняю операцию пробития чека и сразу же делаю запрос о состоянии - видимо 1с делает эти запросы очень быстро и ответ еще не успевает получиться.
Т.е я попробовал "развесить" процедуры с выполнением и запросом состояния по разным кнопкам - в результате все работает сразу.
Но если их запускать друг за другом результат вываливается не заполненый значениями.

Как быть? Поставить какой то таймаут на 500 мс?
14 mistеr
 
19.12.19
09:57
(13) > Поставить какой то таймаут на 500 мс?

Да. В цикле, до определенного максимума, например до 5 с.
15 brenli
 
19.12.19
12:19
В 1с как то можно обработать события http ?
OnResponseFinished например
16 Djelf
 
19.12.19
12:30
(15) Штатно нет, не штатно можно попробовать это:
http://www.1cpp.ru/forum/YaBB.pl?num=1390467243
http://www.1cpp.ru/forum/YaBB.pl?num=1152684759
17 brenli
 
19.12.19
12:43
(16) Спасибо
18 brenli
 
20.12.19
14:08
Продолжаю курить эту тему. Сделал таймаут из простого цикла - но проблема в том что таймаут требуется всегда разный.
(16) и я думаю даже это не помогло бы. Ответ приходит моментально - только статус этого ответа -
result null    
errorDescription    
errorCode 0    
status inProgress <--- , а время работы эквивалентно размеру задания. 1 позиция в чеке или 50 - таймаут разный. Слишком большие таймауты не резонно ставить на чеки с малым количеством строк.
Какие еще есть варианты?
Рекурсивно раз в секунду бомбить web сервер запросом пока он не ответить что то другое?
19 Djelf
 
20.12.19
14:14
(18) Сначала бомбить, но при этом записывать в табличку усредненные таймауты по количеству позиций.
Потом уже бомбить после вычисленного таймаута.