2009-06-08 62 views
0

我們有一個用C語言編寫的應用程序,它與Oracle數據庫交互。這個應用程序是一個可執行文件,並運行在Unix平臺上。我們需要通過http公開這個應用程序作爲Web服務供他人使用。啓用C應用程序作爲Web服務

我想到使用JNI和CXF進行web服務並在tomcat中運行應用程序。

這是一個正確的解決方案還是有其他的可能性?

我發現Axis2支持C語言編寫webservice。我沒有C語言的經驗。 C中的Axis2是否好?我可以使用什麼http服務器來部署應用程序?在這種情況下Apache Web服務器siffice?

編輯:命令行不是一個選項,就像我提到它的一個exe文件,但我必須公開的部分沒有任何命令行可用,它的位很難,因爲它需要複雜的數據結構作爲輸入。

回答

1

這取決於幾個因素。 Vinko的方法要求應用程序有一個很好的乾淨的命令行界面。此外,爲每個Web服務請求創建一個新進程將限制可以服務的請求數量。這可能會也可能不會,這取決於觀衆的期望有多大。

如果沒有那麼棒的命令行界面,並且想要最大限度地提高可以提供的請求數量,那麼會給您留下兩個主要選擇。用Java編寫Web服務,並用JNI或JNA與C進行通話。或者,用純C或C++編寫它。如果負責的開發人員不知道任何C,最後可能不是明智的。編輯:鑑於命令行不是一個選項,我推薦Java與JNI或JNA。

+0

不知道C不會是一個問題,我可以管理,我只需要什麼是最好的解決方案? – 2009-06-08 04:06:58

1

考慮使用Apache Foundation軟件包Axis2/C。它是一個非常穩定的界面,但它的可移植性仍然有限(在Linux上開箱即用,但不在Solaris上)需要一些調整。

但是,既然你說你沒有C語言的使用經驗,那麼你可能會覺得這太令人生畏了。另一方面,你說你試圖轉換爲Web服務的代碼是C語言(可能還有Oracle OCI);這意味着你會發現很難避免學習一些C來讓事情順利進行。

0

在服務器端使用Axis2/C爲兩年多後,我強烈建議不要使用Axis2/C出於以下原因,任何服務器端代碼:

  1. 它是全內存泄漏。也就是說,由WSDL泄漏產生的服務代碼,簡單的HTTP服務器泄漏,CGI模塊泄漏(如果您將它用作基本的CGI,則不會出現問題,但是如果您使用FastCGI或類似的代碼,或者重新使用該代碼,則是一個主要問題) 。 Axis2/C中唯一一部分HTTP服務器代碼目前沒有檢查的是Apache2的mod_axis2模塊。也許它更好。我們沒有任何HTTP服務器實現,您可以很容易地將其嵌入到您的C應用程序中:「簡單HTTP服務器」泄漏並且不支持HTTP保持活動(在每次請求後關閉連接) 。我必須基於boost :: asio HTTP服務器實例和Axis2/C CGI模塊自己實現服務器。花了1天的時間實施,4天來消除所有的內存泄漏。對於任何與Axis2/C相關的工作,這個比例似乎都是標準的。你是否想用valgrind花費數天和時間,調試內存泄漏和雙免費的?

  2. 最重要的是,該項目沒有得到積極的維護:JIRA中的補丁存在很多問題,但需要幾個月和幾年的時間來審查和應用補丁。我懷疑是否有任何嚴肅的項目將它用於服務器端。我的長期計劃是將其克隆到GIT並在github上維護補丁版本(我必須支持已經使用Axis2/C多年的代碼)。

P.S.在我的下一個web服務相關的子項目中,我將使用JNI嵌入Jetty + CXF。

+0

Axis2/C-1.7.0(中繼線)有許多新功能並且完全不穩定。所以我們使用1.6.0。它更穩定,但它也有一些bug。我們在googlecode上創建了一個項目(https://code.google.com/p/axis2c-unofficial/),其中一些補丁從當前的中繼返回。如果您有補丁,可以提高穩定性,並且您準備好投入該項目,請寫信給我( [at] gmail.com)。 – loentar 2013-03-30 20:22:07