如何在 C++ 中进行 SOAP 调用

how to make a soap call in c++

本文关键字:SOAP 调用 C++      更新时间:2023-10-16

我试图找出独立于 wsdl 的 c++ soap 客户端的最佳方法是什么。

我需要的是只知道函数的名称以及发送和发送它并接收 soap 响应或类似内容的参数列表(我知道这没有它那么简单)。

我的想法是做这样的事情:SOAP 请求和响应 使用 libcurl 从文件读取和向文件读取 - C或http://www.cplusplus.com/forum/general/16225/

你能指出我最好的方法吗,或者最好的方法是使用像 gSoap 这样的库并在 c++ 代码中执行 gSoap 生成的类的 c++ 方法?

谢谢

请注意,gSOAP 是 GPL 许可的。限制较少的替代方案是 Axis2/C++

使用 Axis2/C++,您可以从 WSDL 生成存根,并使用生成的类在代码中调用 Web 服务

生成存根(是的 Java,但这是一次性操作):

java org.apache.axis.wsdl.wsdl2ws.WSDL2Ws Calculator.wsdl -lc++ -sclient

然后使用:

#include "Calculator.h" 
#include <stdio.h> 
int main() 
{ 
  Calculator c; 
  int intOut; 
  c.add(20, 40, intOut); 
  printf("result is = %dn", intOut); 
  return 0; 
}

更多细节在这里

取决于你在做什么。如果你在某处需要单个请求,curl(就像你在问题中链接的那样)是合适的。C++包含C,所以这一次你真的不需要C++接口,尽管它会更好。

但是,如果您需要在 SOAP 上做一些严肃的工作,我绝对建议您使用 gSOAP 或类似的库。XML 使用起来相当乏味。序列化/反序列化是处理它的最简单方法,C++静态类型化,则必须从架构生成序列化代码。这正是gSOAP所做的。所以我认为没有比gSOAP更简单的方法了。

即使您没有 WSDL,我认为在 WSDL 中声明您需要的方法并从中生成适当的序列化代码比手动处理 XML 更容易。在更动态的语言中,序列化/反序列化可以在运行时生成,但C++不允许这样做。