C++利用gsoap调用webservice

关于Soap,它是一种简单对象访问协议,是一种轻量的、简单的、基于 XML 的协议,它被设计成在 WEB 上交换结构化的和固化的信息。它是一种通信协议,用于Web应用程序之间的因特网通信,它提供一组不受平台和语言限制的方法使应用程序得以相互之间进行Intertnet通信。而gSoap可以看做是对soap的一个实现封装,它隐藏了在调用WebService中的大量实现细节,使得C++调用WebService变得较为简单。它提供编译工具(实际就是针对接口的WSDL生成类文件),然后引入工程操作生成类即可达到访问WebService接口的目的。仔细查看生成的文件就会发现生成的类与WebService接口的WSDL文件实际相对应的。

C/C++调用Web Service需要用到soap库,一般使用的有gsoap和axis cpp两种实现,这里使用gsoap来调用。gsoap是sourceforge上的一个开源项目,目前版本是2.7.6c,使用简单,可以在linxu、windows、mac多种平台上使用。gsoap的主页地址是http://gsoap2.sourceforge.net/

gsoap使用步骤

gsoap提供了两个有用的工具:wsdl12h.exe和soapcpp2.exe,帮助我们生成代理类。

以http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl为例讲解


 操作流程
      a) 程序->运行 输入cmd 启动命令行;
      b) 打开wsdl2h.exe所在文件路径(不打开的话下面输入时要记着输入全路径,不然找不着了);
      c) 输入:wsdl2h -o service.h http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl,
      d) 回车 运行吧,看提示信息,没有提示故障的话,查找service .h吧(它的保存路径如果不设置和wsdl2h.exe同一目录);
      e) 得到service.h后,打开可以看到接口定义。如果要用宽字符(这样可以避免中文乱码),将该文件的std::string替换为wchar_t*然后保存
      f) 在命令行中 输入:soapcpp2.exe service.h

         其中
             "soapcpp2.exe",此处把soapcpp2.exe和wsdl2h.exe放在同一目录下了,且前面已打开此路径;
             "service.h"即由wsdl生成的头文件,此文件保存位置与soapcpp2.exe相同,故此处可这样输入,若不同还须设置文件路径;
             同样两项之间也有空格!
             可以增加控制选项如"soapcpp2.exe -C cal.h"则只生成客户端所需文件, "soapcpp2.exe -S calc.h"则只生成服务端所需文件,注意C、S的大写
      g) 回车 运行。
  如果提示找不到文件 stlvector.h,因为service.h文件中引用了文件stlvector.h;解决方法:开发包\gsoap\import目下有此文件,复制一份到service.h所在目录。
         注意:此过程中要检查生成的编译信息,确保没有警告信息出现(警告信息可能是gSoap不支持的内容,如果不去除,程序运行故障很难找到根本原因),另不能只看编译结果成功就认为是正确的,存在警告信息也显示为编译成功!!
      h) 编译成功,生成的框架文件保存位置与service.h在同一目录下,包括:MobileCodeWS.nsmap、soapC.cpp、soapMobileCodeWSObject.h、soapMobileCodeWSProxy.h、soapClient.cpp、soapClient.lib

、soapH.h、soapServer.cpp、soapServer.Lib、soapStub.h和接口的请求应答xml文件。
   其中
   MobileCodeWS.nsmap 为命名空间定义文件;
   soapClient.cpp 客户端文件
            soapServer.cpp 服务端文件
            soapMobileCodeWSProxy.h 代理用到,定义我们所要调用的对象
            soapStub.h 此文件中为程序中要用到的接口及结构体的声明(将service.h中的接口经过处理后,在程序中供调用的接口)
            xml文件 为接口的xml格式,可以据此帮助调试等。。。
            其它文件作用还没完全搞明白,向导中有说明,此处不说了以免误导^_^
      i) 编译过程完成。下面开始程序(客户端)
         VS2010
中新建空的win32控制台工程,新建源文件calcClient.cpp;

         复制编译生成的文件(包括sevice.h和stlvector.h)到程序目录中;
         在工程中添加文件MobileCodeWS.nsmap、soapC.cpp、soapClient.cpp、soapH.h、soapStub.h(使用代理添加soapMobileCodeWSProxy.h);
         编译,提示无法找到文件stdsoap2.h、stdsoap2.cpp文件,这两个文件为gSoap的源码文件,在\gsoap文件夹中找到这两个文件,复制到程序目录下并添加到工程中;

调用MobileCodeWS Mcws;
Mcws.endpoint = url; //webservice的地址


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要调用Web服务接口,通常需要以下步骤: 1. 确定Web服务的地址和调用方式:通常可以从Web服务提供商那里获取这些信息。地址通常是一个URL,调用方式可能是SOAP或REST等。 2. 创建客户端应用程序:你需要创建一个能够调用Web服务接口的客户端应用程序。这可以使用许多不同的编程语言和技术来完成,包括C语言。 3. 生成客户端代理:客户端应用程序需要使用Web服务的WSDL(Web服务描述语言)文件来生成一个客户端代理。客户端代理是一个能够调用Web服务方法的代码库,它会将Web服务方法的请求和响应打包和解包,以便在客户端应用程序和Web服务之间进行通信。 4. 调用Web服务方法:一旦你已经生成了客户端代理,就可以使用该代理调用Web服务方法了。要调用方法,只需使用客户端代理提供的方法,并传递所需的参数即可。客户端代理会处理请求和响应,并返回结果。 在C语言中,你可以使用一些开源的库来帮助你调用Web服务接口,比如gSOAP、libcurl等。这些库提供了一些函数和工具,可以帮助你解析WSDL文件、发送HTTP请求和处理响应等。你可以根据你使用的库的文档来了解更多详细信息。 ### 回答2: 调用webservice接口可以通过以下步骤进行: 1. 确定webservice接口的URL地址:首先需要获取webservice接口的URL地址,该地址通常由提供方提供。可以是一个URL或者一个WSDL(Web Services Description Language)文件地址。 2. 创建SOAP请求:SOAP(Simple Object Access Protocol)是一种用于交换结构化信息的协议。根据webservice接口的定义,构建一个符合SOAP协议的请求,包括方法名称、参数等信息。 3. 发送SOAP请求:根据所使用的编程语言和工具,使用相应的函数或类将构建好的SOAP请求发送到webservice接口的URL上。 4. 解析SOAP响应:接收到webservice接口返回的SOAP响应后,根据所使用的编程语言和工具,使用相应的函数或类对响应进行解析,提取出需要的数据。 5. 处理返回数据:根据解析得到的数据,进行相应的处理,可以是展示在界面上,保存到数据库中,或者进行其他业务逻辑操作。 需要注意的是,调用webservice接口可能涉及到一些其他的操作,如设置请求头、参数加密等。此外,根据使用的编程语言和工具的不同,具体步骤和代码实现可能会有所差异。 ### 回答3: 调用WebService接口可以使用不同的方法,在此简单介绍一种常见的方式。 在C#中,可以使用.NET框架提供的类库来调用WebService接口。首先,需要将WebService的WSDL文档导入到项目中。可以在Visual Studio中添加引用,右键点击项目,选择“添加引用”,然后选择“浏览”选项卡,找到WebService的WSDL文档并导入。 接下来,在代码中实例化WebService的代理类,并可以直接调用其中的方法。例如,假设WebService的WSDL文档已经导入,其命名空间为“WebServiceNamespace”,接口为“WebServiceInterface”,其中有一个名为“HelloWorld”的方法。 ```csharp using WebServiceNamespace; // 创建WebService代理类 WebServiceInterface proxy = new WebServiceInterface(); // 调用方法 string result = proxy.HelloWorld(); ``` 以上代码中通过实例化代理类`WebServiceInterface`,然后可以直接调用方法`HelloWorld`来得到结果。接口返回的类型可以根据实际情况进行调整。 需要注意的是,如果WebService接口需要传递参数,可以在调用方法时将参数传入。例如,若`HelloWorld`方法需要一个名为`name`的字符串参数,可以使用以下代码: ```csharp string name = "John"; string result = proxy.HelloWorld(name); ``` 通过以上步骤,就可以在C#中调用WebService接口了。当然,在实际应用中,可能还会存在其他的调用方式,这只是其中一种常见的方式。具体的调用方式还要根据WebService的实际情况而定。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值