代码之家  ›  专栏  ›  技术社区  ›  Bhushan Bhangale

启用C应用程序作为Web服务

  •  0
  • Bhushan Bhangale  · 技术社区  · 15 年前

    我们有一个用C语言编写的应用程序,它与Oracle数据库交互。此应用程序是一个可执行文件,在Unix平台上运行。我们需要通过HTTP将此应用程序公开为Web服务供其他人使用。

    我考虑将JNI和CXF用于WebService,并在Tomcat中运行应用程序。

    这是一个正确的解决方案还是有其他可能性?

    我发现Axis2支持C语言来编写WebService。我没有C语言的经验。C中的axis2是否良好?我可以使用什么HTTP服务器来部署应用程序?在这种情况下,ApacheWebServerSiffice会不会?

    编辑:命令行不是一个选项,好像我提到过它是一个exe,但是我必须公开的部分没有任何可用的命令行,而且它有点困难,因为它需要复杂的数据结构作为输入。

    3 回复  |  直到 12 年前
        1
  •  1
  •   Matthew Flaschen    15 年前

    这取决于几个因素。Vinko的方法要求应用程序有一个干净的命令行界面。此外,为每个WebService请求创建新的进程将限制可服务的请求数。这可能是或可能是不好的,取决于观众的预期规模。

    如果没有那么好的命令行界面,并且您想要最大化您可以服务的请求数量,那么就留给您两个主要的选择。用Java编写Web服务,用JNI调用C JNA . 或者,用纯C或C++编写。如果负责的开发人员不知道任何C,最后一个可能是不可取的。

    编辑:鉴于命令行不是一个选项,我建议使用JNI或JNA。

        2
  •  1
  •   Jonathan Leffler    15 年前

    考虑使用Apache基础包 Axis2/C . 它是一个非常可靠的接口,尽管它的可移植性仍然有一些限制(例如,在Linux上是现成的,但在Solaris上不是现成的——需要做一些调整)。

    然而,既然你说你没有C语言的经验,那对你来说可能会让人望而生畏。另一方面,你说你试图转换成Web服务的代码是C语言(加上Oracle OCI);这意味着你会发现很难避免学习一些C语言来让事情正常工作。

        3
  •  0
  •   vond    12 年前

    在服务器端使用axis2/c超过两年后,我强烈建议不要对任何服务器端代码使用axis2/c,原因如下:

    1. 它充满了内存泄漏。也就是说,由WSDL泄漏、简单的HTTP服务器泄漏、CGI模块泄漏生成的服务代码(如果将其用作基本的CGI,这不是问题,但如果将其用作fastCGI或类似工具,或者重用代码,则是一个主要问题)。到目前为止,我没有检查axis2/c中HTTP服务器代码的唯一部分是用于apache2的mod_axis2模块。也许更好。

    2. Axis2/C没有任何可以轻松嵌入到C应用程序中的HTTP服务器实现:“简单HTTP服务器”泄漏,它不支持HTTP保持有效性(在每次请求后关闭连接)。我必须自己基于boost::asio HTTP服务器示例和axis2/cgi模块实现一个服务器。在实现上花费了1天,在消除所有内存泄漏上花费了4天。这个比例对于任何与axis2/c相关的工作都是标准的。你想和Valgrind一起日夜调试内存泄漏和双倍免费吗?

    3. 最重要的是,项目没有得到积极的维护:他们的JIRA中有很多补丁的问题,但是审查和应用补丁需要数月和数年的时间。我怀疑是否有任何严肃的项目将它用于服务器端。我的长期计划是将其克隆到Git中,并在GitHub上维护补丁版本(我必须支持多年来用axis2/c实现的代码)。

    另外,在下一个与Web服务相关的子项目中,我将使用JNI嵌入Jetty+CXF。