首页 > 代码库 > gsoap for Qt (windows)

gsoap for Qt (windows)

本文经过自己实践总结,同时参考网上另外一哥们文档.

环境:win32,vs2008,Qt 4.7,gsoap2.7.17

一,安装vs2008+Qt 4.7+插件就不说了,直接用QtCreator也可以。

二,到官网下载gsoap2.7.17,下不到自己想办法,我上传群共享了。但群号不方便说。

三,源码解压,然后把gsoap-2.7/gsoap/bin/win32设置到系统的Path中去,这个目录下有两个可执行文件wsdl2h.exe和soapcpp2.exe,这两个文件可以根据wsdl接口文件生成你需要的客户端接口文件。

四,建立服务器webserivce测试,下面代码拿来注意:

打开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你好";

        }

    }

}

五,进行客户端gaosp操作:

1,建立文件夹client/gsoap。并把gsoap-2.7/gsoap/下的stdsoap2.cpp和stdsoap2.h拷贝至刚刚建立的gsoap文件夹下。另外还要考几个文件gsoap/soapC.cpp ,gsoap/soapClient.cpp ,有需要的自己继续拷贝,我测试就这几个够了。

2,wsdl2h –I "E:/gsoap/source/gsoap-2.7/gsoap/WS"-s -o test.h http://localhost:5925/Service1.asmx?WSDL(加-s是表示不使用stl库)

3, 执行soapcpp2  -I    "E:/gsoap/source/gsoap-2.7/gsoap/import"test.h

4, 编写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=newQPushButton("invoke");

         line= new QLineEdit;

         connect(btn,SIGNAL(clicked()),this,SLOT(OnClicked()));

         QHBoxLayout*layout =newQHBoxLayout;

         layout->addWidget(line);

         layout->addWidget(btn);

         setLayout(layout);

     }

private:

     QPushButton*btn;

     QLineEdit*line;

     public slots:

         void OnClicked()

         {

              Service1Soapsoap;

              soap_set_mode(soap.soap,SOAP_C_UTFSTRING);

              _ns1__HelloWorldreq;

              _ns1__HelloWorldResponseres;

              soap.__ns2__HelloWorld(&req,&res);

              QStringstr =QString::fromUtf8(res.HelloWorldResult->c_str());

              line->setText(str);

         }

};

 

#include "test.moc"

 

int main(intargc,char* argv[])

{

     QApplicationapp(argc,argv);

     MyDialogmd;

     md.show();

     return app.exec();

 

}

根据需要自己修改。

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

七,soapcpp2常用选项

  • -C 仅生成客户端代码
  • -S 仅生成服务器端代码
  • -L 不要产生soapClientLib.c和soapServerLib.c文件
  • -c 产生纯C代码,否则是C++代码(与头文件有关)
  • -I 指定import路径(见上文)
  • -x 不要产生XML示例文件
  • -i 生成C++包装,客户端为xxxxProxy.h(.cpp),服务器端为xxxxService.h(.cpp)。

八,生成的客户端接口在test.h文件中,可以查看编码。

gsoap for Qt (windows)