零:说明

  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

      

      头文件代码:      

  1. //gsoap ns service name: add
  2. //gsoap ns service namespace: http://localhost/add.wsdl
  3. //gsoap ns service location: http://localhost
  4. //gsoap ns service executable: add.cgi
  5. //gsoap ns service encoding: encoded
  6. //gsoap ns schema namespace: urn:add
  7.  
  8. 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 < )
  13. {
  14. printf("usage: %s <server_port> \n", argv[]);
  15. exit();
  16. }
  17. else
  18. {
  19. m = soap_bind(&add_soap, NULL, atoi(argv[]), );
  20. if (m < )
  21. {
  22. soap_print_fault(&add_soap, stderr);
  23. exit(-);
  24. }
  25. fprintf(stderr, "Socket connection successful: master socket = %d\n", m);
  26. for ( ; ; )
  27. {
  28. s = soap_accept(&add_soap);
  29. if (s < )
  30. {
  31. soap_print_fault(&add_soap, stderr);
  32. exit(-);
  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 ;
  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 ;
  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代码   

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "stdsoap2.h"
  4. #include "soapH.h"
  5. #include "add.nsmap"
  6.  
  7. int add(const char* server, int num1, int num2, int *sum);
  8.  
  9. int main(int argc, char **argv)
  10. {
  11. int result = -;
  12. char* server="http://localhost:4567";
  13. int num1 = ;
  14. int num2 = ;
  15. int sum = ;
  16. if( argc < )
  17. {
  18. printf("usage: %s num1 num2 \n", argv[]);
  19. exit();
  20. }
  21. num1 = atoi(argv[]);
  22. num2 = atoi(argv[]);
  23. result = add(server, num1, num2, &sum);
  24. if (result != )
  25. {
  26. printf("soap err,errcode = %d\n", result);
  27. }
  28. else
  29. {
  30. printf("%d+%d=%d\n", num1, num2, sum );
  31. }
  32. return ;
  33. }
  34.  
  35. int add(const char* server, int num1, int num2, int *sum)
  36. {
  37. struct soap add_soap;
  38. int result = ;
  39. soap_init(&add_soap);
  40. // soap_set_namespaces(&add_soap, add_namespaces);
  41. //该函数是客户端调用的主要函数,后面几个参数和add.h中声明的一样,前面多了3个参数,函数名是接口函数名ns__add前面加上
  42.  
  43. //soap_call_
  44. soap_call_ns__add( &add_soap, server, "", num1, num2, sum );
  45. if(add_soap.error)
  46. {
  47. printf("soap error:%d,%s,%s\n", add_soap.error, *soap_faultcode(&add_soap), *soap_faultstring(&add_soap) );
  48. result = add_soap.error;
  49. }
  50.  
  51. soap_end(&add_soap);
  52. soap_done(&add_soap);
  53. return result;
  54. }

三、测试

  1、分别编译server、client

  

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

  

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

  

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

  

  

   

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

  1. Windows下搭建Spark+Hadoop开发环境

    Windows下搭建Spark+Hadoop开发环境需要一些工具支持. 只需要确保您的电脑已装好Java环境,那么就可以开始了. 一. 准备工作 1. 下载Hadoop2.7.1版本(写Spark和H ...

  2. 【转】linux和windows下安装python集成开发环境及其python包

    本系列分为两篇: 1.[转]windows和linux中搭建python集成开发环境IDE 2.[转]linux和windows下安装python集成开发环境及其python包 3.windows和l ...

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

    Windows下的Objective-C集成开发环境(IDE) 分类: Objective-C2012-04-20 21:54 26631人阅读 评论(42) 收藏 举报 windowside编译器c ...

  4. Windows下搭建objective C开发环境

    摘自:http://blog.csdn.net/zhanghefu/article/details/18320827 最近打算针对iPhone.iPod touch和iPad开发一些应用,所以,需要开 ...

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

    作者:渡世白玉链接:https://www.zhihu.com/question/19589089/answer/30312199来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...

  6. windows下搭建nginx+php开发环境

    windows下搭建nginx+php开发环境 1.前言 windows下大多我们都是下载使用集成环境,但是本地已经存在一个集成环境,但不适合项目的需求.因此准备再自己搭建一个环境. 2.准备 工具: ...

  7. Windows下安装Object C开发环境,及Hello Word(转)

    Windows下安装Object C开发环境,及Hello Word 最近想学习iphone开发,但是由于没有c基础,只有java基础.所以先从基础学习,首先是搭建环境,目前手头没有mac机子,只能先 ...

  8. Windows下快速搭建安卓开发环境android-studio

    Windows下快速搭建安卓开发环境android-studio 发布时间:2018-01-18 来源:网络 上传者:用户 关键字: 安卓 搭建 Android Windows 快速 环境 Studi ...

  9. 【RN - 基础】之Windows下搭建React Native开发环境

    前言 React Native由Facebook公司于2015年F8大会上开源,其主张“Learn once, write everywhere”.React Native的核心设计理念是:既拥有Na ...

随机推荐

  1. matlab2016b-linux版本在ubutu16.04x64上面不能打开摄像头的处理方法

    this  can  not  work.    need  find  other way.   ================================================== ...

  2. 现在有一个城市销售经理,需要从公司出发,去拜访市内的商家,已知他的位置以及商家的位置,但是由于城市道路交通的原因,他只能在左右中选择一个方向,在上下中选择一个方向,现在问他有多少种方案到达商家地址。给定一个地图map及它的长宽n和m,其中1代表经理位置,2代表商家位置,-1代表不能经过的地区,0代表可以经过的地区,请返回方案数,保证一定存在合法路径。保证矩阵的长宽都小于等于10。

    include "stdafx.h" #include<iostream> #include<vector> #include<algorithm&g ...

  3. C#里类的get和set方法编写和调用

    using System; class Date { int day; int month; int year; public int Day{ get { return day; } set { d ...

  4. 【Selenium + Python】路径报错之OSError: [Errno 22] Invalid argument: './t/report/2018-03-23_11:03:12_report.html'

    现象: 此问题真的是太痛苦了,查了好多资料是说路径的问题,结果还是报错,后来一点点的排查才发现原来是!!!!!! 废话不多说上原来代码: if __name__ == '__main__': star ...

  5. POJ 1840 Eqs(hash)

    题意  输入a1,a2,a3,a4,a5  求有多少种不同的x1,x2,x3,x4,x5序列使得等式成立   a,x取值在-50到50之间 直接暴力的话肯定会超时的   100的五次方  10e了都 ...

  6. 在ios中使用单例模式编程

    本文转载至 http://blog.csdn.net/remote_roamer/article/details/7107007     1.    @implementation Singleton ...

  7. 九度OJ 1028:继续畅通工程 (最小生成树)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3140 解决:1338 题目描述:     省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有 ...

  8. hadoop 小文件 挂载 小文件对NameNode的内存消耗 HDFS小文件解决方案 客户端 自身机制 HDFS把块默认复制3次至3个不同节点。

    hadoop不支持传统文件系统的挂载,使得流式数据装进hadoop变得复杂. hadoo中,文件只是目录项存在:在文件关闭前,其长度一直显示为0:如果在一段时间内将数据写到文件却没有将其关闭,则若网络 ...

  9. JavaScript 四种显示数据方式

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. python -- redis连接与使用

    前面我们简单介绍了redis nosql数据库,现在我们在python里面来使用redis. 一.python连接redis 在python中,要操作redis,目前主要是通过一个python-red ...