C++ 如何使用Qt检查webservice是否启动
我编写了一些代码来监视SOAP Web服务。基本上,它使用QNetworkAccessManager向webservice地址发送HTTP GET请求,如果收到响应,则我知道服务已启动。我认为这是可行的,但每隔一段时间(每两天一次)我就会收到一个通知,说服务器已关闭,然后下次它检查时,会说它再次启动。因此,服务器实际上没有停机,请求发生了一些事情。我想知道是否有更好的方法来监控Web服务,下面是一些伪代码来向您展示我所做的工作:C++ 如何使用Qt检查webservice是否启动,c++,web-services,qt,http,networking,C++,Web Services,Qt,Http,Networking,我编写了一些代码来监视SOAP Web服务。基本上,它使用QNetworkAccessManager向webservice地址发送HTTP GET请求,如果收到响应,则我知道服务已启动。我认为这是可行的,但每隔一段时间(每两天一次)我就会收到一个通知,说服务器已关闭,然后下次它检查时,会说它再次启动。因此,服务器实际上没有停机,请求发生了一些事情。我想知道是否有更好的方法来监控Web服务,下面是一些伪代码来向您展示我所做的工作: main{ Qtimer timer; conne
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***
}
}
编辑
将if条件更改为包含错误检查在一般情况下,检查网络回复内容是否为空以确保webservice已关闭似乎不是一个好的解决方案 我建议使用
QNetworkReply::error()
方法检查是否发生错误。
有关详细信息,请参阅
更新
没有提到如何从QNetworkReply
对象获取回复数据。我假设使用了类似于QIODevice::readAll/read()
的东西。如果是这样,则空数据回复并不意味着服务器端发生了错误。见例
当没有网络错误,但回复数据意外为空时,我会假设webservice已启动,但webservice端的请求处理或请求/响应传输出现问题。如果语句是常规的..即。如果(没有错误)等等,同样容易。当代码报告错误时,您得到的确切错误状态是什么?