windows下vs2012用gsoap开发webservice实例

零:说明

  1、本文是根据网上前人经验结合自己动手操作写成,开发工具用的vs2012,gsoap用的是gsoap-2.8;

  2、gsoap提供的工具简单介绍

    1)wsdl2h.exe:根据WSDL文件生成头文件。这个是别人发布了webservice服务,提供给我们WSDL文件,我们根据WSDL生成头文件,进而实现我们的客     户端。

    2)soapcpp2.exe:根据头文件生成调用远程soap服务的客户端框架和提供soap服务的服务端框架。如果我们要自己做server端,则需要自己写头文件,          根据头文件,生成客户端框架和服务端框架,在此框架中实现自己的服务。

一:根据头文件用soapcpp2.exe生成框架代码

  0、该soap服务端是实现两个整数相加,供远程调用;

  1、编写头文件

    1)在vs中新建解决方案,名字为gSoapTest

      

    2)在项目gSoapTest下新建头文件,名字为add.h

      

      头文件代码:      

//gsoap ns service name: add
//gsoap ns service namespace: http://localhost/add.wsdl
//gsoap ns service location: http://localhost
//gsoap ns service executable: add.cgi
//gsoap ns service encoding: encoded
//gsoap ns schema namespace: urn:add

int ns__add( int num1, int num2, int* sum );

    3)将gsoap安装目录下的\gsoap-2.8\gsoap\bin\win32下的soapcpp2.exe拷贝到add.h同一目录下。

     此处我的目录是E:\biancheng\gSoapTest\gSoapTest  

    

    4)在控制台中跳转到add.h目录下,执行soapcpp2.exe add.h,最后会显示Compilation successful,代表执行成功

      

    此时E:\biancheng\gSoapTest\gSoapTest该目录下回生成很多文件

    

二、根据框架实现server端代码

  1、在gSoapTest解决方案下新建项目,项目名为server。此时,server所在目录为E:\biancheng\gSoapTest\server

    1)将E:\biancheng\gSoapTest\gSoapTest下的文件add.nsmap,add.h,soapH.h,soapStub.h  soapC.cpp,soapServer.cpp以及

     \gsoap-2.8\gsoap\bin\win32目录下的stdsoap2.h,stdsoap2.cpp拷贝到server项目目录(E:\biancheng\gSoapTest\server)下。

    2)将add.nsmap,add.h,soapH.h,soapStub.h,stdsoap2.h添加到项目server头文件中。

    3)将soapC.cpp,soapServer.cpp,stdsoap2.cpp添加到项目server源文件中。

    4)在项目server源文件中新建源文件,名字为server.cpp

    

    5)将wsock32.lib库添加到server项目中

    右键server->属性->配置属性->连接器->输入->附加依赖项,在附加依赖项中添加wsock32.lib

     

    6)编写server.cpp代码   

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include "stdsoap2.h"
 4 #include "add.h"
 5 #include "add.nsmap"
 6 int main(int argc, char* argv[])
 7 {
 8     int m, s;
 9     struct soap add_soap;
10     soap_init(&add_soap);
11     //soap_set_namespaces(&add_soap, add_namespaces);
12     if (argc < 2)
13     {
14         printf("usage: %s <server_port> \n", argv[0]);
15         exit(1);
16     }
17     else
18     {
19         m = soap_bind(&add_soap, NULL, atoi(argv[1]), 100);
20         if (m < 0)
21         {
22             soap_print_fault(&add_soap, stderr);
23             exit(-1);
24         }
25         fprintf(stderr, "Socket connection successful: master socket = %d\n", m);
26         for ( ; ; )
27         {
28             s = soap_accept(&add_soap);
29             if (s < 0)
30             {
31                 soap_print_fault(&add_soap, stderr);
32                 exit(-1);
33             }
34             fprintf(stderr, "Socket connection successful: slave socket = %d\n", s);
35             soap_serve(&add_soap);//该句说明该server的服务
36             soap_end(&add_soap);
37         }
38     }
39     return 0;
40 }
41
42 //server端的实现函数与add.h中声明的函数相同,但是多了一个当前的soap连接的参数
43
44 int ns__add(struct soap *add_soap, int num1, int num2, int *sum)
45 {
46     *sum = num1 + num2;
47     return 0;
48 }

二、根据框架实现client端代码

  1、在解决方案gSoapTest中新建项目,名字为client。此时,server所在目录为E:\biancheng\gSoapTest\client

    1)将E:\biancheng\gSoapTest\gSoapTest下的文件add.nsmap,add.h,soapH.h,soapStub.h  soapC.cpp,soapClient.cpp以及

     \gsoap-2.8\gsoap\bin\win32目录下的stdsoap2.h,stdsoap2.cpp拷贝到client项目目录(E:\biancheng\gSoapTest\client)下。

    2)将add.nsmap,add.h,soapH.h,soapStub.h,stdsoap2.h添加到项目client头文件中。

    3)将soapC.cpp,soapClient.cpp,stdsoap2.cpp添加到项目client源文件中。

    4)在项目server源文件中新建源文件,名字为client.cpp

    

    5)编写clent.cpp代码   

#include <stdio.h>
#include <stdlib.h>
#include "stdsoap2.h"
#include "soapH.h"
#include "add.nsmap"

int add(const char* server, int num1, int num2, int *sum); 

int main(int argc, char **argv)
{
    int result = -1;
    char* server="http://localhost:4567";
    int num1 = 0;
    int num2 = 0;
    int sum = 0;
    if( argc < 3 )
    {
        printf("usage: %s num1 num2 \n", argv[0]);
        exit(0);
    }
    num1 = atoi(argv[1]);
    num2 = atoi(argv[2]);
    result = add(server, num1, num2, &sum);
    if (result != 0)
    {
        printf("soap err,errcode = %d\n", result);
    }
    else
    {
        printf("%d+%d=%d\n", num1, num2, sum );
    }
    return 0;
}

int add(const char* server, int num1, int num2, int *sum)
{
    struct soap add_soap;
    int result = 0;
    soap_init(&add_soap);
    // soap_set_namespaces(&add_soap, add_namespaces);
    //该函数是客户端调用的主要函数,后面几个参数和add.h中声明的一样,前面多了3个参数,函数名是接口函数名ns__add前面加上

//soap_call_
    soap_call_ns__add( &add_soap, server, "", num1, num2, sum );
    if(add_soap.error)
    {
        printf("soap error:%d,%s,%s\n", add_soap.error, *soap_faultcode(&add_soap), *soap_faultstring(&add_soap) );
        result = add_soap.error;
    }

    soap_end(&add_soap);
    soap_done(&add_soap);
    return result;
}

三、测试

  1、分别编译server、client

  

  2、启动server,并绑定访问端口号4567

  

  通过IE访问http://localhost:4567,如下,则服务端成功

  

  3、启动client,输入1 2,如下,代表客户端访问服务端成功

  

  

   

时间: 2024-10-10 11:22:17

windows下vs2012用gsoap开发webservice实例的相关文章

gsoap开发webservice

gSOAP编译工具提供了一个SOAP/XML 关于C/C++ 语言的实现,从而让C/C++语言开发web服务或客户端程序的工作变得轻松了很多.绝大多数的C++web服务工具包提供一组API函数类库来处理特定的SOAP数据结构,这样就使得用户必须改变程序结构来适应相关的类库.与之相反,gSOAP利用编译器技术提供了一组透明化的SOAP API,并将与开发无关的SOAP实现细节相关的内容对用户隐藏起来. gSOAP的编译器能够自动的将用户定义的本地化的C或C++数据类型转变为符合XML语法的数据结构

Windows下搭建objective C开发环境

最近打算针对iPhone.iPod touch和iPad开发一些应用,所以,需要开始学习Objective C(苹果推出的类似C语言的开发语言).由于苹果的自我封闭的产业链发展模式(从芯片.机器.开发语言.终端产品.服务)的限制,要想开发针对苹果 iPhone等产品的应用程序,就需要用Mac机器,在Xcode的IDE上使用Objective C语言开发.Mac机器就不用说了,那比PC机器要贵不少(当然性价比还是很高的),所以,要想廉价方式学习Objective C就必须要在Windows上能搭建

C++开发安卓、windows下搭建Android NDK开发环境

1. NDK(Native Development Kit) 1.1 NDK简介 Android NDK是一套允许开发人员使用本地代码(如C/C++)进行Android APP功能开发的工具,通过这个工具,我们可以把用C/C++代码编译成可以直接运行在Android平台上的本地代码,这些本地代码以动态链接库( *.so )的形式存在,也正因为这样,我们可以通过复用这些动态链接库从而复用本地代码. 那么,通过NDK这个开发工具包,那么我们是否可以将一个APK完全使用C/C++来编写呢? 答案是不可

Windows下搭建go语言开发环境 以及 开发IDE (附下载链接)

1.下载 并且 安装 Go安装包 =========================================================== 在CSDN上传了我的版本,供大家下载: =========================================================== go1.2.windows-386.msi : http://download.csdn.net/detail/shuideyidi/7718563 go1.2.1.windows-am

Windows下的Objective-C集成开发环境(IDE)

Windows下的Objective-C集成开发环境(IDE) 分类: Objective-C2012-04-20 21:54 26631人阅读 评论(42) 收藏 举报 windowside编译器compilerlibrarysystem Objective-C是苹果软件的编程语言,想要上机学习.调试,有一个集成开发环境(IDE)方便很多.有三类方法搭建Objective-C的集成开发环境: 1)   使用苹果的平台,集成开发环境使用Xcode.但如果没有苹果平台,想在Windows环境下学习

windows下Sublime Text3 java开发环境的配置

windows下Sublime Text3 java开发环境的配置: 1.编写批处理脚本run.bat放在jdk的bin目录下,例如我的就放在"D:\Java\bin". runbat内容: ==========开始(本行不复制)========= @ECHO OFF   cd %~dp1   ECHO Compiling %~nx1.......   IF EXIST %~n1.class (   DEL %~n1.class   )   javac -encoding UTF-8 

【Android】利用adt-bundle在Windows下轻松搭建Android开发环境与Hello world

Android开发环境有三种方式,分别是JDK+SDK+Eclipse+ADT.JDK+adt-bundle与JDK+Android Studio. 不要使用JDK+SDK+Eclipse+ADT这种方式,不是说什么太复杂的,是因为郭嘉的网络你懂的,打开SDK工具之后就根本就下载不了.Android Studio也是不行的,说好集合大量打开环境.安装的时候却还是需要联网. 建议使用JDK+adt-bundle这种方式来搭建Android开发环境.同时adt-bundle认准20131030版本.

Windows 下最佳的 C++ 开发的 IDE 是什么?

作者:渡世白玉链接:https://www.zhihu.com/question/19589089/answer/30312199来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 这个需要看你开发什么类型的软件来定的,和使用什么类库来定的..如果只是做win下软件,开发MFC或者DUI,ATL这些,不用说的VS系列..如果你是之开发纯C++一类的无界面程序,这就选择多了,那个顺手用那个,如果需要考虑跨平他,那就Code::Blocks或者Qt-Creator吧,这可

在windows下使用linux的开发环境

windows下做开发确实有些不方便,比如python.ruby什么的都要自己装,不过这还是小事情.有一次想安装node-sass,windows下报错缺少MSBuild什么的,可能需要装一个vs解决,不过估计没有人愿意装那么大的东西,另外如果你想安装node-canvas的话可能准备工作会更多...不过肯定有人像我一样买不起Mac(哭)而且也习惯了windows系统,但又想方便的在linux环境下开发.如何是好... 最开始只是在电脑虚拟机上安装了Ubuntu,开发的时候切换到Ubuntu,不