【问题标题】:how to make a soap call in c++如何在 C++ 中进行肥皂调用
【发布时间】:2012-12-18 15:41:29
【问题描述】:

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

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

我的想法是做这样的事情: SOAP Request and Response Read from and to file using libcurl - C 或者 http://www.cplusplus.com/forum/general/16225/

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

谢谢

【问题讨论】:

    标签: c++ xml soap client


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 是的,我知道,我已经知道 gSOAP,但我要问的是是否有任何简单的方法可以做到这一点......也许有一些简单的库......我已经看到 libcurl连接,xml消息没有帮助。我需要一些抽象的交流方式……不知道怎么做……但这是我的问题,有什么办法吗?
      • @Nuno:我认为没有比 gSOAP 更简单的方法了。使用 XML 的最简单方法是使用序列化/反序列化库和静态类型的 C++,唯一的方法是从给定模式生成(反)序列化代码。这就是 gSOAP 所做的。任何其他方法都意味着只有在测试期间才能捕获更多代码和更多错误,因为它不能像生成的(反)序列化那样保证正确的架构和类型。
      • @Nuno:也许,你可以使用 python。它让一切变得非常简单。
      猜你喜欢
      • 2021-12-26
      • 2012-10-22
      • 1970-01-01
      • 2016-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多