我编写了一些代码来监控SOAP Web服务。基本上它使用QNetworkAccessManager向Web服务地址发送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***
}
}
修改 更改 if 条件以包含错误检查
答案 0 :(得分:0)
在一般情况下,检查网络回复内容是否为空以确保Web服务已关闭似乎不是一个好的解决方案。
我建议使用QNetworkReply::error()
方法检查是否发生错误。
有关详细信息,请参阅http://doc.qt.digia.com/qt/qnetworkreply.html#error。
<强>更新强>
没有提到如何从QNetworkReply
对象获取回复数据。我认为使用QIODevice::readAll/read()
之类的东西。如果是这样,那么空数据回复并不意味着在服务器端发生错误。参见例如http://doc.qt.digia.com/qt/qiodevice.html#readAll
当没有网络错误但回复数据意外为空时,我会假设网络服务已启动,但在Web服务端或请求/响应传输上的请求处理出现问题。