MSXML2.XMLHTTP таймаут

1. starjevschik 16.11.18 10:42 Сейчас в теме
7.7! Есть вот такая отправка в стороннюю базу (на сайт)
XMLДокумент=XMLАнализатор.СоздатьДокумент();     
	xmlhttp=CreateObject("MSXML2.XMLHTTP");
	xmlhttp.Open("GET",АдресСайта_,0,ПользСайта_,ПаролСайта_);
	
	// xmlhttp.timeout = 300000;
	
	xmlhttp.Send();

вот надо бы в нее вставить таймаут, типа как в закомментированной строчке. Но как в этой строчке - не работает, поле агрегатного объекта не обнаружено.
Как это сделать?
Или еще круче - сделать асинхронный вызов, как это делается в VBA, я нашел, а в 1с 7.7 как-то можно?
По теме из базы знаний
Ответы
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. CheBurator 3119 16.11.18 14:03 Сейчас в теме
таймаут чего? вставить паузу между исполнением операторов Open и Send - это можно кучей способов сделать (например Предупреждение("Жди",СколькоСекунд) или с использованием 1С++)
3. starjevschik 16.11.18 14:59 Сейчас в теме
(2) нет, таймаут выполнения. Она отправляет запрос и ждет. Если тот сервер по каким-то причинам не отвечает, то она ждет вечно.
От кого из них она ждет ответа, я пока не уловил, по-моему от Open()
xmlhttp.Open("GET",АдресСайта_,0,ПользСайта_,ПаролСайта_);

вот этот нолик - третий параметр - это флажок синхронного вызова. Если поставить туда 1, будет асинхронный, но как в 1с ей сказать, какую процедуру выполнять после завершения? И в любом случае нужно поставить какую-то отсечку по времени ожидания.
4. dvk09 2 19.11.18 03:34 Сейчас в теме
попробуй поиграться:

//*******************************************
Функция ПроверкаСоединенения(Метод = "/api")
	
	WinHTTP = СоздатьОбъект("msxml2.serverxmlhttp.6.0");
	WinHTTP.SetTimeouts(10000, 10000, 100000, 10000);
	WinHTTP.Open("GET", ПолучитьАдрес(Метод), Асинхронно, Имя, Пароль);

	Попытка
		WinHTTP.send();
		Возврат Строка(WinHTTP.status);
	Исключение
		Сообщить(ОписаниеОшибки());
		Возврат "";
	КонецПопытки;
	
	Возврат "200";
	
КонецФункции // ПроверкаСоединенения

Показать
6. starjevschik 20.11.18 22:22 Сейчас в теме
(4) спасибо, но ошибки там нет. Если open() ждет ответа, то так и будет ждать вечно, никакая попытка тут не поможет, т.к. нет никакой ошибки. Нужно всего лишь поставить таймаут на ожидание, казалось бы, нежели это так сложно... но пока так и непонятно, как же это сделать.
7. dvk09 2 21.11.18 03:04 Сейчас в теме
(6) Во первых объект другой: "msxml2.serverxmlhttp.6.0"
Во вторых он такое хавает "WinHTTP.SetTimeouts(10000, 10000, 100000, 10000);"...
Ни на какие ошибки я и не намекал.



Sub setTimeouts(resolveTimeout As Long, connectTimeout As Long, sendTimeout As Long, receiveTimeout As Long)
Member of MSXML2.ServerXMLHTTP
Specify timeout settings (in milliseconds)



У XMLHTTP такого метода нет...

Возможно вызов функции ПроверкаСоединенения так-же придётся обернуть в попытку...
8. dvk09 2 21.11.18 03:09 Сейчас в теме
(7) Но я могу ошибаться и это не поможет.
Просто предлагаю попробовать, не более того.
5. dvk09 2 19.11.18 03:37 Сейчас в теме
Ну и естественно для 7.7 Асинхронно = 0

Или копай в сторону 1С++, если накопаешь, отпишись тут, может пригодиться...
9. dvk09 2 21.11.18 03:27 Сейчас в теме
Ещё у обоих этих объектов есть свойство readyState:

Property readyState As Long
read-only
Member of MSXML2.XMLHTTP60
Get ready state

Гипотетически можно попробовать запустить запрос асинхронно.
Потом в таймере проверять значение этого свойства, если 4 то запрос завершен.

Не знаю можно ли вставлять сюда ссылки, но поисковик выдал такое:
https://developer.mozilla.org/ru/docs/Web/API/XMLHttpRequest/readyState

таймеру задать определённое количество повторов, и если стало 4 на каком то шаге - обработать ответ.
Если не стало 4 на максимальном шаге, то сообщить что есть проблема.
Ну и очистить объект.

Больше вариантов не вижу.

периодически использую либо XMLHTTP, либо serverxmlhttp.
(Заметил что serverxmlhttp не со всеми сервисами срабатывает, разбираться пока не стал, не было острой необходимости. По моему в моей ситуации возникал вопрос с доверием сертификатам. Но XMLHTTP тогда отработал без проблем...)
10. dvk09 2 21.11.18 03:29 Сейчас в теме
P.S.: Таймер использую из 1С++ или из формекса, точно не помню, какая из библиотек позволяет его создавать.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот