Я написал некоторый код для мониторинга веб-службы SOAP. В основном он использует QNetworkAccessManager для отправки HTTP-запроса GET на адрес веб-службы, и если я получу ответ, я знаю, что служба работает. Я думал, что это работает, но время от времени (раз в пару дней) я получаю уведомление о том, что сервер не работает, а затем в следующий раз, когда он проверяет, что он снова работает. Таким образом, сервер на самом деле не отключается, что-то происходит с запросом. Мне было интересно, если есть лучший способ для мониторинга веб-службы, ниже приведен псевдокод, чтобы показать вам, что я сделал:
main{
Qtimer timer;
connect(timer, SIGNAL(timeout()), this, SLOT(send()));
timer.start(300000);
}
send(){
QNetworkAccessManager *qnam;
connect(qnam, SIGNAL(finished(QNetworkReply*)), this, SLOT(requestFinished(QNetworkReply*));
qnam.get("https://testWebservice.com/TEST/webservice");
}
requestFinished(QNetworkReply *reply){
QByteArray data = reply.getData();
if(reply.error == some sort of error indicating server is down, or if reply == empty){
***SERVER DOWN***
}
else{
***SERVER UP***
}
}
РЕДАКТИРОВАТЬ
изменил если условие включения проверки ошибок
Проверка того, является ли содержимое сетевого ответа пустым, чтобы убедиться, что веб-сервис не работает, не кажется мне хорошим решением в общем случае.
Я бы предложил использовать QNetworkReply::error()
метод, чтобы проверить, происходит ли ошибка.
увидеть http://doc.qt.digia.com/qt/qnetworkreply.html#error для деталей.
ОБНОВИТЬ
Не упоминается, как получаются данные ответа QNetworkReply
объект. Я предполагаю, что что-то вроде QIODevice::readAll/read()
используется. Если так, то пустой ответ на данные не означает, что произошла ошибка на стороне сервера. Смотрите, например http://doc.qt.digia.com/qt/qiodevice.html#readAll
Когда нет сетевой ошибки, но данные ответа неожиданно пусты, я бы предположил, что веб-сервис работает, но что-то идет не так с обработкой запросов на стороне веб-сервиса или с передачей запросов / ответов.
Других решений пока нет …