У нас есть библиотека с очень сложной логикой, реализованной в C. Это имеет интерфейс командной строки с не слишком сложные основанные на операция со строками аргументы. Для доступа к этому мы хотели бы перенести библиотеку так, чтобы к ней можно было получить доступ с простым RPC XML или даже простым HTTP вызовы POST.
Имея некоторый опыт с Java, моя первая идея была бы
Я полагаю, что должно уже быть что-то простое, которое могло использоваться, таким образом, я отправляю этот вопрос здесь. Решение имеет следующие требования
Кроме того, к предложению JNI/JNA, я думаю в мире C#, который не должно быть слишком трудно записать веб-сервису и назвать этот неуправляемый модуль кода, но я надеюсь, что кто-то может дать мне некоторые подсказки, которые выполнимы в отношении требований.
Создать модуль apache довольно просто, и поскольку вы знакомы с xmlrpc, вам стоит проверить mod-xmlrpc2. Вы можете легко добавить свой код на C в этот модуль apache и получить работающий xmlrpc сервер за считанные минуты
Я думаю, вы также можете опубликовать его как веб-сервис на основе SOAP. gSoap можно использовать для предоставления интерфейса сервиса из библиотеки. Вы изучали gSOAP? Смотрите http://www.cs.fsu.edu/~engelen/soap.html
С уважением, Kangkan
Для этого можно использовать метод расширения Enumerable.StartMany .
Если я правильно прочитаю ваш код, код для этого будет:
var filteredCombinations = combinatedResults.SelectMany(o => o)
.Where(value => value > 0)
.Select(v => v.ToString());
Edit : Как указано выше, вышеупомянутый код не присоединяет каждый элемент подмножеств к последовательности, как это делает исходный код. Встроенные методы позволяют использовать регулярное выражение:
var filteredCombinations = combinatedResults
.Where(resultSet => resultSet.Any(value => value > 0)
.Select(resultSet => String.Join(",",
resultSet.Where(value => value > 0)
.Select(v => v.ToString()).ToArray()));
-121--4554016- A.
import re
m = re.match(r'\s*(?P<n>[-+]?[.0-9])\s*(?P<u>.*)', s)
if m is None:
raise ValueError("not a number with units")
number = m.group("n")
unit = m.group("u")
Это даст вам число (целое число или фиксированная точка; слишком трудно отличить научное обозначение «e» от префикса единицы) с необязательным знаком, за которым следуют единицы, с необязательным пробелом.
Можно использовать re.compile ()
, если вы собираетесь выполнять много совпадений.
Зависит от того, какие технологии вам удобны, какие уже установлены и работают на серверах и каковы требования к загрузке.
Как насчет необработанной CGI? Предполагая, что код C не имеет состояния между запросами, вы можете сделать это без изменения библиотеки вообще. Напишите простой сценарий, который извлекает параметры запроса из среды CGI, возможно, устраняет входные данные, вызывает библиотеку через интерфейс командной строки и упаковывает результат в любой отклик HTTP. Затем настройте Apache для отправки соответствующих URL-адресов в этот сценарий. Например, Python поддерживает библиотеку XML-RPC, а также любой другой язык сценариев, используемый в Интернете.
Сервлеты звучат как переполнение, но, например, если вы хотите получить несколько запросов на экземпляр процесса CGI и не хотите участвовать в настройке Apache, то может быть проще всего придерживаться того, что вы знаете.
Если вы собираетесь использовать веб-службы, возможно, вам будет полезна Soaplab . По сути, это инструмент для обертывания существующих приложений командной строки в веб-службы SOAP. Создаваемые им веб-службы выглядят немного странно, но это довольно популярный способ заставить что-то подобное работать.
В данный момент я делаю то же самое с C ++. В моем случае я пишу модуль PHP, чтобы позволить сценариям PHP обращаться к логике в моей библиотеке C ++.
Затем я могу использовать любой формат, который я хочу, чтобы остальной мир мог его увидеть - сначала это будет просто веб-приложение PHP, но я также буду разрабатывать интерфейс XML-RPC.
Если вы идете по пути JNI, посмотрите SWIG. http://www.swig.org/Doc1.3/Java.html
При условии, что у вас есть заголовки для проектирования привязок, с swig довольно легко работать.