如何在c ++中进行soap调用

时间:2012-12-18 15:41:29

标签: c++ xml soap client

我正在试图找出一个独立于wsdl的c ++ soap客户端的最佳方法。

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

我的想法是做以下事情: SOAP Request and Response Read from and to file using libcurl - C 要么 http://www.cplusplus.com/forum/general/16225/

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

由于

2 个答案:

答案 0 :(得分:3)

请注意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; 
}

More details here

答案 1 :(得分:2)

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

但是如果你需要对SOAP做一些认真的工作,我肯定会建议使用gSOAP或类似的库。使用XML非常繁琐。序列化/反序列化是处理它的最简单方法,而C ++是静态类型的,必须从模式生成序列化代码。这正是gSOAP所做的。所以我认为没有比gSOAP更简单的方法。

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