2

我试图弄清楚做一个独立于 wsdl 的 c++ 肥皂客户端的最佳方法是什么。

我需要的是只知道函数的名称和参数列表来发送和发送它并接收肥皂响应或类似的东西(我知道这并不像它那么简单)。

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

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

谢谢

4

2 回答 2

4

请注意 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 = %d\n", intOut); 
  return 0; 
}

更多细节在这里

于 2017-01-23T14:00:51.850 回答
2

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

但是如果你需要对 SOAP 做一些认真的工作,我肯定会推荐使用gSOAP或类似的库。XML 使用起来相当乏味。序列化/反序列化是处理它的最简单方法,并且 C++ 是静态类型的,序列化代码必须从模式中生成。这正是 gSOAP 所做的。所以我认为没有比 gSOAP 更简单的方法了。

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

于 2012-12-18T15:51:52.100 回答