如何包装C库以便可以从Web服务调用它

时间:2010-02-10 20:52:14

标签: c web-services http unmanaged wrapper

我们有一个在C中实现非常复杂逻辑的库。它有一个命令行界面,不需要太复杂的基于字符串的参数。为了访问它,我们希望包装库,以便可以使用简单的XML RPC或甚至简单的HTTP POST调用来访问它。

有一些Java经验,我的第一个想法是

  • JNI / JNA
  • 中包装图书馆
  • 使用精简WS堆栈和servlet引擎
  • 通过Apache向servlet引擎发送代理请求

我相信应该已经有一些简单的东西可以使用,所以我在这里发布这个问题。解决方案具有以下要求

  • 它应该可以部署到当前的Linux发行版,最好通过包管理
  • 它应该与标准的Web服务器集成(如我的例子中的Apache)
  • 对库的界面进行小的更改应该是可管理的
  • 端到端(HTTP-WS-library-WS-HTTP)解决方案不应该产生太多开销,但可靠性非常重要

除了JNI / JNA提案之外,我认为在C#世界中编写Web服务并调用此非托管代码模块应该不会太难,但我希望有人可以给我一些关于要求可行的指针。

6 个答案:

答案 0 :(得分:2)

如果你要使用网络服务,或许Soaplab会很有用。它基本上是一个将现有命令行应用程序包装在SOAP Web服务中的工具。它生成的Web服务看起来有点奇怪,但它是一种非常流行的方式来制作这样的工作。

答案 1 :(得分:1)

我认为您也可以将其发布为基于SOAP的Web服务。 gSoap可用于提供库外的服务接口。你有没有探索过gSOAP?见http://www.cs.fsu.edu/~engelen/soap.html

此致 Kangkan

答案 2 :(得分:1)

创建一个apache模块非常简单,因为您熟悉xmlrpc,所以应该查看mod-xmlrpc2。您可以轻松地将C代码添加到此apache模块,并在几分钟内运行xmlrpc服务器

答案 3 :(得分:0)

取决于您熟悉的技术,已安装和使用的服务器以及您的负载要求。

原始CGI怎么样?假设C代码在请求之间是无状态的,您可以在不修改库的情况下执行此操作。编写一个简单的脚本,将请求参数拉出CGI环境,可能会清理输入,通过命令行界面调用库,并将结果打包到您想要的任何HTTP响应中。然后配置Apache以将相关URL分派给此脚本。例如,Python具有对XML-RPC的库支持,Web上使用的所有其他脚本语言也是如此。

Servlet听起来有点过分,但是例如如果你想要每个CGI流程实例化多个请求,并且不想参与Apache配置,那么最简单的方法就是坚持你所知道的。

答案 4 :(得分:0)

目前我正在用C ++做类似的事情。就我而言,我正在编写一个PHP模块,允许PHP脚本访问我的C ++库中的逻辑。

然后我可以使用我想让世界其他地方看到的任何格式 - 最初它只是通过PHP Web应用程序,但我也将开发XML-RPC接口。

答案 5 :(得分:0)

如果您要沿着JNI路线行驶,请查看SWIG。 http://www.swig.org/Doc1.3/Java.html

假设您有项目绑定的标题,swig很容易使用。