0

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

我想到了将 JNI 和 CXF 用于 web 服务并在 tomcat 中运行应用程序。

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

我发现Axis2支持C语言编写webservice。我没有C语言的经验。C语言中的Axis2好吗?我可以使用什么 http 服务器来部署应用程序?在这种情况下,Apache 网络服务器是否足够?

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

4

3 回答 3

1

这取决于几个因素。Vinko 的方法要求应用程序具有良好干净的命令行界面。此外,为每个 web 服务请求创建一个新进程将限制可以服务的请求数量。这可能会也可能不会,这取决于预期的观众有多大。

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

编辑:鉴于命令行不是一个选项,我推荐使用 JNI 或 JNA 的 Java。

于 2009-06-08T03:20:34.657 回答
1

考虑使用 Apache Foundation 包Axis2/C。这是一个非常可靠的界面,尽管它的可移植性仍然略有限制(例如,在 Linux 上开箱即用,但在 Solaris 上不行 - 需要一些调整)。

但是,既然你说你没有 C 方面的经验,那可能会让你感到害怕。另一方面,您说您尝试转换为 Web 服务的代码是用 C 语言编写的(可能还有 Oracle OCI);这意味着你会发现很难避免学习一些 C 来让事情正常进行。

于 2009-06-08T06:00:51.703 回答
0

在服务器端使用 Axis2/C 两年多之后,我强烈建议不要将 Axis2/C 用于任何服务器端代码,原因如下:

  1. 它充满了内存泄漏。即,从 WSDL 泄漏生成的服务代码、简单的 HTTP 服务器泄漏、CGI 模块泄漏(如果您将其用作基本 CGI 则没有问题,但如果您从 FastCGI 或类似的地方使用它,或者重用代码,则会出现重大问题) . 到目前为止,Axis2/CI 中唯一未检查的 HTTP 服务器代码部分是用于 Apache2 的 mod_axis2 模块。也许会更好。

  2. Axis2/C 没有任何可以轻松嵌入到 C 应用程序中的 HTTP 服务器实现:“简单 HTTP 服务器”泄漏并且它不支持 HTTP 保持活动(每次请求后关闭连接)。我必须自己基于 boost::asio HTTP 服务器示例和 Axis2/C CGI 模块实现一个服务器。花了 1 天的时间来实现,4 天的时间来消除所有的内存泄漏。对于任何与 Axis2/C 相关的工作,这个比例似乎都是标准的。你想和 valgrind 一起度过日日夜夜,调试内存泄漏和双释放吗?

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

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

于 2012-06-17T15:50:04.707 回答