zoukankan      html  css  js  c++  java
  • C/C++利用gsoap库调用WebService

    C/C++调用WebService需要用到soap库,一般使用的有gsoap和axis cpp两种实现,这里使用gsoap来调用。gsoap可以在 linxu、windows、mac多种平台上使用。

    gsoap的主页地址是http://gsoap2.sourceforge.net/

    新建一个WebService:

    1 //写一个简单的方法
    2 [WebMethod(Description="返回字符串")]
    3 public string HelloWorld(string str)
    4 {
    5     return "The Value Is " + str;
    6 }

    gsoap使用步骤:

      1、解压gsoap 在Windows下使用解压下的gsoap-2.8gsoapinwin32下的wsdl2h.exe和soapcpp2.exe工具。

      2、用wsdl2h根据webservice生成.h文件,wsdl2h [opt] 头文件名 WSDL文件名或URL

        wsdl2h常用选项:

        -o 文件名,指定输出头文件

        -n 名空间前缀 代替默认的ns

        -c 产生纯C代码,否则是C++代码

        -s 不要使用STL代码

        -t 文件名,指定type map文件,默认为typemap.dat

        -e 禁止为enum成员加上名空间前缀 type map文件用于指定

      3、利用wsdl2h.exe生成.h文件

      

        生成成功后会多出一个UserInfo.h文件

        

      4、利用soapcpp2.exe生成代理函数

      

        生成的前提:把gsoapimport目录下的文件拷贝一份放在soapcpp2.exe的同一个目录,否则生成不成功

        

      5、生成后会多出很多文件(纯C代码文件)

       

    第三步,就是在vc中建个工程,设置如下:

       1、新建一个C++项目

      2、在gsoap目录下拷贝stdsoap2.c、stdsoap2.h到新建的C++项目文件下,再把gsoapinwin32目录生成好的soapC.c、soapClient.c、soapH.h、soapStub.h、targetver.h、UserInfoSoap.nsmap拷贝到新建的C++项目文件下

      3、新建好C++工程后,添加所有拷贝到新建的C++项目文件下的所有文件

      4、新建一个主入口的c文件,尅把自动生成的cpp main文件删除,然后写入代码

     1 #include<stdio.h>
     2 #include"UserInfoSoap.nsmap"
     3 #include"soapStub.h"
     4 int main()
     5 {
     6     int iRet;
     7     struct soap userinfoSoap;
     8     struct _ns1__HelloWorld helloWorld;
     9     struct _ns1__HelloWorldResponse helloWorldResponse;
    10     const char *pcAddr="http://localhost:31749/UserInfo.asmx?WSDL";
    11     helloWorld.str= "LiGengMing";
    12     soap_init(&userinfoSoap);
    13     iRet=soap_call___ns1__HelloWorld(&userinfoSoap,pcAddr,NULL,&helloWorld,&helloWorldResponse);
    14     if(iRet!=0)
    15     {
    16         printf("读取数据失败");
    17     }
    18     else
    19     {
    20         printf("读取数据成功:%s",helloWorldResponse);
    21     }
    22     soap_destroy(&userinfoSoap);   
    23     soap_end(&userinfoSoap);   
    24     soap_done(&userinfoSoap);   
    25     getchar();
    26     return 0;
    27 }

          5、注意点:helloWorld.str就是接口方法的传入参数

  • 相关阅读:
    简单工厂
    Asp.Net Catch的应用
    ADO和ADO.NET的区别
    PLSql语句学习(三)
    三层结构的B/S系统(收藏)
    MVC 模式
    利用.net反射动态调用指定程序集的中的方法
    .NET反射的简单示例
    ToString格式化
    HTML:关于位置的几个概念
  • 原文地址:https://www.cnblogs.com/LiGengMing/p/5594314.html
Copyright © 2011-2022 走看看