Включить приложение C как веб-сервис - PullRequest
0 голосов
/ 08 июня 2009

У нас есть приложение, написанное на языке C, которое взаимодействует с базой данных Oracle. Это приложение является исполняемым и работает на платформе Unix. Нам нужно выставить это приложение через http как веб-сервис для других пользователей.

Я подумал об использовании JNI и CXF для веб-сервиса и запустил приложение в tomcat.

Это правильное решение или есть другие возможности?

Я обнаружил, что Axis2 поддерживает язык C для написания веб-сервиса. У меня нет опыта языка Си. Axis2 в C это хорошо? Какой http-сервер я могу использовать для развертывания приложения? Будет ли в этом случае веб-сервер Apache?

РЕДАКТИРОВАТЬ: командная строка не вариант, как если бы я упомянул, что это исполняемый файл, но часть, которую я должен представить, не имеет никакой доступной командной строки и немного сложнее, поскольку она требует сложной структуры данных в качестве ввода. *

Ответы [ 3 ]

1 голос
/ 08 июня 2009

Рассмотрите возможность использования пакета Apache Foundation Axis2 / C . Это довольно солидный интерфейс, хотя он все еще имеет немного ограниченную переносимость (работает из коробки на Linux, но не на Solaris, например - требует некоторых настроек).

Однако, так как вы говорите, что у вас нет опыта в C, это может сделать его слишком пугающим для вас. С другой стороны, вы говорите, что код, который вы пытаетесь преобразовать в веб-сервис, находится на C (плюс, возможно, Oracle OCI); это означает, что вам будет трудно избежать изучения некоторого C, чтобы все заработало.

1 голос
/ 08 июня 2009

Это зависит от нескольких факторов. Метод Винко требует, чтобы приложение имело хороший чистый интерфейс командной строки. Кроме того, создание нового процесса для каждого запроса веб-службы ограничит количество запросов, которые могут быть обслужены. Это может или не может быть хорошо в зависимости от того, какой большой аудитории ожидается.

Если интерфейс командной строки не так уж и хорош, и вы хотите максимально увеличить количество запросов, которые вы можете обслуживать, тогда у вас останется два основных варианта. Написать веб-сервис на Java и вызвать C с JNI или JNA . Или напишите это на чистом C или C ++. Последнее, вероятно, не рекомендуется, если ответственные разработчики не знают никакого C.

РЕДАКТИРОВАТЬ: Учитывая, что командная строка не вариант, я рекомендую Java с JNI или JNA.

0 голосов
/ 17 июня 2012

После использования Axis2 / C на стороне сервера в течение более двух лет я настоятельно НЕ рекомендую использовать Axis2 / C для любого кода на стороне сервера по следующим причинам:

  1. Он полон утечек памяти. А именно, сервисный код, сгенерированный из утечек WSDL, простых утечек HTTP-сервера, утечек модуля CGI (что не является проблемой, если вы используете его в качестве основного CGI, но является серьезной проблемой, если вы используете его из FastCGI или аналогичного или повторно используете код) , Единственная часть кода HTTP-сервера в Axis2 / C, которую я до сих пор не проверял, - это модуль mod_axis2 для Apache2. Может быть, лучше.

  2. Axis2 / C не имеет реализации HTTP-сервера, которую вы могли бы легко встроить в свое приложение C: утечка «простого HTTP-сервера» не поддерживает HTTP-активности (закрывает соединение после каждого запроса) ). Мне пришлось самому реализовать сервер на основе примеров HTTP-сервера boost :: asio и модуля CGI Axis2 / C. Потратил 1 день на внедрение и 4 дня, чтобы убрать все утечки памяти. Эта пропорция кажется стандартной для любой работы, связанной с Axis2 / C. Вы хотите проводить дни и ночи с valgrind, отладкой утечек памяти и double-free?

  3. Самое главное, проект НЕ активно поддерживается: в JIRA есть много проблем с исправлениями, но для просмотра и применения исправлений требуются месяцы и годы. Я сомневаюсь, что какой-либо серьезный проект использует его для серверной части. В долгосрочной перспективе я планирую клонировать его в GIT и поддерживать исправленную версию на github (я должен поддерживать код, уже реализованный в Axis2 / C в течение многих лет).

P.S. в моем следующем подпроекте, связанном с веб-сервисами, я буду использовать JNI для встраивания Jetty + CXF.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...