Здаруствуйте уважаемый All
Такая проблема
Нужно получать данные по http
пример джоба
X++:
static void testWeight(Args _args)
{
COM objXHTTP;
str s;
str _url = "http://cbr.ru"; //Для примера рабочий
// str _url = "http://192.168.7.77"; //Нет http пингуется
// str _url = "http://192.168.15.200/GetWeight"; //Не пингуется
;
objXHTTP = new COM("MSXML2.XMLHTTP");
objXHTTP.Open("GET", _url, false);//true асинхронный
objXHTTP.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");//отключаем кэш это важно
objXHTTP.send();
If(objXHTTP.readyState() == 3 || objXHTTP.readyState() == 4) //4 - Complete; 3 - Some data has been received.
{
info('ok');
}
else
{
error("Сервер недоступен");
}
s = objXHTTP.responseText();
info(s);
}
Но заказчика не устраивает время задержки если сервер не доступен!
пауза происходит при срабатывании objXHTTP.send();
можно изменить код использовать асинхронный доступ
X++:
objXHTTP.Open("GET", _url, true);//true асинхронный
objXHTTP.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");//отключаем кэш это важно
objXHTTP.send();
sleep(1000);//задержка для получения данных
Но этот код не работает: не меняется readyState, при вызове responseText происходит ошибка
Хотя JScript работает
Код:
var _url = "http://cbr.ru";
//var _url = "http://192.168.15.53/getweight"; //для проверки недоступности
var objXHTTP = new ActiveXObject("Msxml2.XMLHTTP");
objXHTTP.Open("GET", _url, true);
objXHTTP.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
objXHTTP.send(null);
WScript.Sleep(1000);
if (objXHTTP.readyState == 3 || objXHTTP.readyState == 4)
{
WScript.Echo("Done");
}
else
{
WScript.Echo("Server Недоступен " + objXHTTP.readyState);
}
s = objXHTTP.responseText;
WScript.Echo(s);
Проверка состояния objXHTTP.readyState в цикле в ax тоже ничего не дает, состояние остается равным 1
ЗЫ Изменение в реестре параметров KeepAliveTimeout и ServerInfoTimeout ничего не дало