如何使用Qt检查Web服务是否已启动
How to check if webservice is up, using Qt
我写了一些代码来监视SOAP Web服务。基本上,它使用QNetworkAccessManager向Web服务地址发送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 条件以包括错误检查
检查网络回复内容是否为空以确保 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 服务已启动,但 Web 服务端的请求处理或请求/响应传输出现问题。
相关文章:
- 如何使用C++确定应用程序是否已在窗口中启动?
- 在继承C++子项创建者开始时,是否可以不启动父创建者?
- 计时器是否从另一个线程启动?
- 由 JOB 中的进程启动的子进程是否可以将 JOB 属性设置为脱离作业?
- 对于每个线程,random_device是否以不同的状态启动?
- SetTimer (带有回调函数)是否通过启动新线程来工作?
- 有没有办法检查内存缓存是否已重新启动?
- 是否有其他方法将.dll文件从一个项目复制到我的启动项目中的可执行文件旁边
- 无论如何,是否可以确定MFC应用程序是通过PC重新启动或用户单击应用程序快捷方式开始的
- 如何判断从 CreateProcess 启动的进程是否仍在运行
- 线程是否真的在调用 std::future::get() 后启动
- 在启动C 应用程序时,如何检查MongoDB是否正在运行
- 标准C++11是否保证std::async(std::launch::asyncfunc)在单独的线程中启动func
- 是否可以在异常(SEGFAULT)错误后自动重新启动程序
- 是否可以重新启动提升::未来
- EXE 是否可以调用启动它的 DLL
- 在技术上是否可以创建 Java 虚拟机的映像文件并使用它来更快地启动 Java 应用程序
- 是否允许在同一 Sqlite 数据库连接中启动多个事务
- 在 C++/STL/MFC 应用程序启动早期发生的致命异常中,是否可以信任堆栈回溯符号名称?
- 如何使用Qt检查Web服务是否已启动