12

我尝试使用 gSOAP 访问 Web 服务(例如,使用提供的 WSDL 生成 C 存根,然后在应用程序中使用它们)。但是,我发现生成的 .c 和目标文件非常大(几兆字节),这在我工作的嵌入式环境中是一个问题。

您是否知道任何更简单的 SOAP 库,或者我是否必须回退到像 ezXML 这样的通用 XML 生成器和解析器?

4

4 回答 4

5

我最近也研究了这个问题,我发现最好的选择是 gSOAP,它非常成熟并且经过了很好的测试。但是,我决定采用非 SOAP 路由,这是一个选项,因为我同时在客户端和服务器端。在使用 gSOAP 之前,请确保您可以使用他们的许可证,您可能不得不发布您的代码或向他们付费,具体取决于您如何使用它。

另一种选择是 Apache Axis2/C,尽管我没有使用它的经验(我猜它的占用空间与 gSOAP 相似)。他们的客户端 API 在这里。关于客户端 API 的教程在这里

如果您决定采用已解析的 XML 路线,您可能会对这个SO 问题感兴趣(请参阅答案)。

您还可以为解析的路线检查 boost::spirit。如果您对 C++ 感到满意,它能够制作小型、快速、专用(和通用)的解析器(它们可以被编写为可重入的,因此通过带有外部“C”接口的静态对象调用它们是犹太教)。我可以从一般意义上保证它(不是特定于 XML)。陡峭的学习曲线,但回报丰厚。

于 2010-05-17T00:32:51.893 回答
2

这是您正在创建的 Web 服务吗?如果是这样,请考虑使用REST而不是 SOAP。REST 要简单得多,您可以使用现有的、经过测试的、正在工作的 HTTP 处理程序,而不是通过一个巨大的 HTTP - XML - SOAP 转换层。

如果您正在使用其他人的 Web 服务,请检查 SOAP 模式和/或响应示例。我不敢相信我在提倡这一点,但如果架构不可扩展或递归,您最好使用简单的 LALR 解析器,甚至在原始 HTTP 响应中进行字符串匹配,而不是尝试解析 SOAP 或 XML。这在嵌入式 C 中实现起来要简单得多。

于 2010-05-13T18:15:17.267 回答
1

通常我们会退回到直接创建 XML(主要是通过字符串连接),在这种情况下无法使用好的 SOAP 库。

另一种解决方案可能是您切换到 JSON,它(通常)具有较小的开销和请求/响应大小,因此在嵌入式程序中可能会更好。如果您只有可用的 SOAP WebService,您可以在服务器上使用代理脚本,它将 JSON 请求转换为 SOAP 请求,将 SOAP 响应转换为 JSON 响应。

于 2010-05-10T11:15:19.993 回答
1

你看过Apache CXF吗?它有几个代码生成功能

* Java to WSDL
* WSDL to Java
* XSD to WSDL
* WSDL to XML
* WSDL to SOAP
* WSDL to service

建立消费者的更有用的指南在这里

于 2010-05-16T15:58:24.047 回答