加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Qt+gsoap调用WebService

发布时间:2020-12-16 22:02:46 所属栏目:安全 来源:网络整理
导读:版权声明 本文为原创作品,请尊重作者的劳动成果。转载必须保持文章完整性,并以超链接形式注明原始作者“tingsking18”和主站点地址,方便其他朋友提问和指正。 Qt+gsoap调用WebService 1.???????前言 Qt本身给我们提供了调用WebService的解决方案qsoap,看

版权声明

本文为原创作品,请尊重作者的劳动成果。转载必须保持文章完整性,并以超链接形式注明原始作者“tingsking18”和主站点地址,方便其他朋友提问和指正。

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://www.voidcn.com/tag/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才可以显示。


代码下载:

Qt使用gsoap来访问webservice,绝对可用例子

http://download.csdn.net/download/luchenlin4/6852861


from:http://blog.csdn.net/tingsking18/article/details/5456831?reload

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读