Qt+gsoap调用WebService

版权声明

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

Qt+gsoap调用WebService

1. 前言

Qt本身给我们提供了调用WebService的解决方案qsoap,看了一下他的介绍,感觉实在是太弱了,而且又是个新出的东西,所以还是决定不用他。既然使用Qt,那当然是跨平台的解决方案才合适,显示MSSoapToolKit也不在选择的范围。于是改用老牌的gsoap

2. 环境

Qt版本:

Qt4.6(其他版本也适合)

GSOAP版本:

gsoap2.7.12(其他版本也适用)

服务端开发环境:

VS2008C#.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.cppstdsoap2.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 最后就是qmakenmake

注意:

soap_set_mode(soap.soap, SOAP_C_UTFSTRING);这句是为了显示中文的,让字符串采用utf8编码。当我们在使用命令行程序的时候,即使使用了该选项也显示不出中文,因为命令行显示的字符串必须经过decodeGBK才可以显示。

你可能感兴趣的:(webservice,C#,asp.net,SOAP,qt)