C++ 如何使用Qt检查webservice是否启动

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

我编写了一些代码来监视SOAP Web服务。基本上,它使用QNetworkAccessManager向webservice地址发送HTTP GET请求,如果收到响应,则我知道服务已启动。我认为这是可行的,但每隔一段时间(每两天一次)我就会收到一个通知,说服务器已关闭,然后下次它检查时,会说它再次启动。因此,服务器实际上没有停机,请求发生了一些事情。我想知道是否有更好的方法来监控Web服务,下面是一些伪代码来向您展示我所做的工作:

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端的请求处理或请求/响应传输出现问题。

如果语句是常规的..即。如果(没有错误)等等,同样容易。当代码报告错误时,您得到的确切错误状态是什么?