Qt+gsoap调用WebService
1. 前言
Qt本身给我们提供了调用WebService的解决方案qsoap,看了一下他的介绍,感觉实在是太弱了,而且又是个新出的东西,所以还是决定不用他。既然使用Qt,那当然是跨平台的解决方案才合适,显示MS的SoapToolKit也不在选择的范围。于是改用老牌的gsoap。
2. 环境
Qt版本:
Qt4.6(其他版本也适合)
GSOAP版本:
gsoap2.7.12(其他版本也适用)
服务端开发环境:
VS2008、C#、.net2.0以上
3. 准备
到http://sourceforge.net/projects/gsoap2下载gsoap,然后解压,并把
gsoap-2.7/gsoap/bin/win32设置到系统的Path中去。
4. 服务端
打开VS2008,建立WebService工程。全部采用默认设置就可以了。
最后修改一下代码,加上点中文。如下:
namespace WebService1
{
/// <summary>
/// Service1 的摘要说明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]
// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
// [System.Web.Script.Services.ScriptService]
public class Service1 : System.Web.Services.WebService
{
[WebMethod]
public string HelloWorld()
{
return "Hello World你好";
}
}
}
5. 客户端
l 建立文件夹client/gsoap。并把gsoap-2.7/gsoap/下的stdsoap2.cpp和stdsoap2.h拷贝至刚刚建立的gsoap文件夹下。
l 打开命令行,cd C:/WSTest/client/gsoap,然后执行:
wsdl2h -I"E:/gsoap/source/gsoap-2.7/gsoap/WS" -o test.h http://localhost:5925/Service1.asmx?WSDL
该操作将生成C:/WSTest/client/gsoap/test.h
l 执行soapcpp2 -I"E:/gsoap/source/gsoap-2.7/gsoap/import" test.h
l 然后我们编写test.cpp
#include <QApplication>
#include <QPushButton>
#include <QLineEdit>
#include <QHBoxLayout>
#include <QDialog>
#include "gsoap/Service1Soap.nsmap"
#include "gsoap/soapService1SoapProxy.h"
class MyDialog:public QDialog
{
Q_OBJECT
public:
MyDialog(QWidget *parent=0):QDialog(parent)
{
btn =new QPushButton("invoke");
line = new QLineEdit;
connect(btn,SIGNAL(clicked()),this,SLOT(OnClicked()));
QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(line);
layout->addWidget(btn);
setLayout(layout);
}
private:
QPushButton *btn;
QLineEdit *line;
public slots:
void OnClicked()
{
Service1Soap soap;
soap_set_mode(soap.soap, SOAP_C_UTFSTRING);
_ns1__HelloWorld req;
_ns1__HelloWorldResponse res;
soap.__ns2__HelloWorld(&req,&res);
QString str = QString::fromUtf8(res.HelloWorldResult->c_str());
line->setText(str);
}
};
#include "test.moc"
int main(int argc,char* argv[])
{
QApplication app(argc,argv);
MyDialog md;
md.show();
return app.exec();
}
l 然后就是编写pro文件。
SOURCES += test.cpp /
gsoap/soapC.cpp /
gsoap/soapClient.cpp /
gsoap/stdsoap2.cpp
l 最后就是qmake、nmake
注意:
soap_set_mode(soap.soap, SOAP_C_UTFSTRING);这句是为了显示中文的,让字符串采用utf8编码。当我们在使用命令行程序的时候,即使使用了该选项也显示不出中文,因为命令行显示的字符串必须经过decode成GBK才可以显示。
http://blog.csdn.net/tingsking18/article/details/5456831
Qt+gsoap调用WebService的更多相关文章
- c++ 使用 gsoap 调用 WebService 中文乱码
c++ 使用 gsoap 调用 WebService 中文乱码 问题产生: 使用gsoap时,如果WebService服务端及客户调用端都使用 C++ , 再传递中文时不会存在乱码问题, 当客户 ...
- QT里使用Gsoap调用WebService
错误了很多天,今天终于搞定,并得到了服务器的结果.这里把错误的原因记录下来. 首先是这里,之前一直没有加载进来,所以一直报错 SOURCES += main.cpp\ gsoap/soapClient ...
- C++客户端通过gSOAP调用WebService
webService三要素: SOAP(Simple Object Access Protocol).WSDL(WebServicesDescriptionLanguage).UDDI(Univers ...
- VS2010使用c++、gSOAP创建WebService 图文教程
VS2010使用c++.gSOAP创建的WebService 图文教程 环境 操作系统:Windows 7gsoap版本:2.8.32C++编译器/开发环境:Visual Studio 2010 gS ...
- Qt调用WebService
从网上查找Qt调用WebService的方案,需要下载三方的类库,而且需要使用好几个控制台命令,才能生成代理客户端类.因为只是简单的测试,没有采用这种方式,直接使用HTTP的Get获取网站内容,也非常 ...
- gsoap创建webservice服务简单教程
版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] WebServicesoapgsoap 使用gsoap创建webservice服务 下载gsop 准备待导出的服务接口定义文件比 ...
- C#开发WEBService服务 C++开发客户端调用WEBService服务
编写WEBService服务端应用程序并部署 http://blog.csdn.net/u011835515/article/details/47615425 编写调用WEBService的C++客户 ...
- 一个简单的webservice的demo(下)winform异步调用webservice
绕了一大圈,又开始接触winform的项目来了,虽然很小吧.写一个winform的异步调用webservice的demo,还是简单的. 一个简单的Webservice的demo,简单模拟服务 一个简单 ...
- 调用webservice进行身份验证
因为同事说在调用webservice的时候会弹出身份验证的窗口,直接调用会返回401,原因是站点部署的时候设置了身份验证(账号名称自己配置).因而在调用的时候需要加入身份验证的凭证. 至于如何获取身份 ...
随机推荐
- #AzureChat - 自动伸缩和虚拟机
我们很高兴地推出再一次 #AzureChat,这是 @WindowsAzure 团队为您精心打造的一个在 Twitter 上进行的聊天活动! #AzureChat 专注于云计算的各个方面以及云开发的最 ...
- HDU 4738 双连通模版题
九野的博客,转载请注明出处:http://blog.csdn.net/acmmmm/article/details/11711577 题意:给定n个点,m条无向边 下面m行表示u , v ,边权值 求 ...
- pthread_detach(pthread_self())
pthread_detach(pthread_self()) 将状态改为unjoinable状态,确保资源的释放.其实简单的说就是在线程函数头加上 pthread_detach(pthread_sel ...
- NET Core 构成体系
NET Core 构成体系 简析 .NET Core 构成体系 Roslyn 编译器 RyuJIT 编译器 CoreCLR & CoreRT CoreFX(.NET Core Librarie ...
- ModelAndView
我给你改一下public ModelAndView showDept(HttpServletRequest req,HttpServletResponse resp,ModelMap model){ ...
- 清华集训2014 day1 task2 主旋律
题目 这可算是一道非常好的关于容斥原理的题了. 算法 好吧,这题我毫无思路,直接给正解. 首先,问题的正面不容易求,那么就求反面吧: 有多少种添加边的方案,使得这个图是DAG图(这里及以下所说的DAG ...
- Ubuntu下ssh免password登录安装
1.首先在本机安装openssh-server和openssh-client. 命令:sudo apt-get install openssh-server openssh-client 2.在检查当 ...
- Android之——Fragment生命周期(日志截图版)
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46867159
- PHP - 子类使用父类的构造函数
/* * 子类使用父类中的构造方法. */ //父类方法 class Person { //父类中的构造方法 function __construct(){ echo '这是父类中的构造方法!'; } ...
- 面试中关于Java中涉及到知识点(转)
本篇文章会对面试中常遇到的Java技术点进行全面深入的总结,帮助我们在面试中更加得心应手,不参加面试的同学也能够借此机会梳理一下自己的知识体系,进行查漏补缺. 1. Java中的原始数据类型都有哪些, ...