Подключение C # (интерфейс) к apache / php / python (интерфейс) - PullRequest
1 голос
/ 21 июня 2009

Обзор: Мы собираемся написать пользовательский интерфейс C # для выбора частей наших веб-приложений. Это для очень узкой аудитории (например, внутри).

Наши веб-приложения написаны на PHP и / или Python с использованием Apache в качестве веб-сервера.

Почему? Тщательно продуманный собственный интерфейс Windows иногда может быть намного эффективнее, чем соблюдение правил, установленных веб-браузером.

Вопрос: Как лучше всего общаться между C # и PHP / Python, используя HTTPS? Я говорю в основном о сериализации / десериализации и преобразовании различных типов данных, находящихся на каждом языке.

В идеале мы должны иметь строго типизированные структуры или объекты для работы в C # и соответствующие структуры данных, созданные в PHP / Python для работы с этой целью. Генераторы кода в порядке.

Я посмотрел на Apache Thrift , рассмотрел вопрос о расширении наших внутренних библиотек данных, рассмотрел буфер протокола Google и т. Д. * Thrift выглядит многообещающе, но их документация очень скудна.

  1. Необходимо свести к минимуму накладные расходы разработчика.
  2. Важно поддерживать разумную производительность, особенно на стороне сервера.

Приветствуются комментарии по поводу полезности XMLRPC, SOAP или других связанных технологий.

Есть указатели?

Ответы [ 4 ]

4 голосов
/ 21 июня 2009

У меня нет реального опыта работы с PHP, но я сделал много фоновых веб-сервисов Python, используемых интерфейсными клиентами на разных языках и в разных средах. SOAP - единственная технология, из тех, что я пробовал, в большинстве случаев оставляющая у меня кислый вкус - слишком много «церемоний» / накладных расходов. (В далеком прошлом я также пробовал Corba, и, как только я пытался взаимодействовать между независимыми реализациями для разных языков, ощущение не было таким уж разным; -).

XML-RPC, JSON и протокольные буферы оказались для меня вполне пригодными.

Протоколные буферы - это то, что мы обычно используем в Google, и я не уверен, что вы найдете их недостаточно документированными - пожалуйста, задавайте конкретные вопросы, и я посмотрю, что я могу сделать, чтобы официально улучшить нашу документацию или неофициально! Их главное преимущество заключается в том, что они настолько «туго» на проводе - минимальные накладные расходы при максимальной гибкости. JSON тоже хорош - и не только для простоты использования в клиентах Javascript, либо: иногда я использовал его в качестве формата по умолчанию для общения между различными языками, даже когда JS вообще не был задействован!

Как только ваше веб-приложение настроено на отправку (скажем) буфера протокола, совсем нетрудно сделать его способным отправлять XML или JSON по запросу - один дополнительный параметр? Outputformat = JSON в запросе GET это все, что нужно, и выбор правильного выходного сериализатора тривиально прост (в Python, но, я уверен, и в PHP).

«Получение строго типизированных объектов» на вашем конце C # - это, на мой взгляд, работа, которую лучше всего выполнять в слое C # на вашем конце. Никакого прямого опыта с этим нет, но, например, у меня есть завернутый прием буферов протокола в C ++ в фабричные классы, которые выбрасывают идеально сформированные и статически типизированные объекты (или выдают исключения, когда входящие данные не были семантически правильными ); Я знаю, что не будет сложнее для JSON или XML, и я очень сомневаюсь, что будет сложнее для Java, C #, Python, если вы заботитесь, или любого другого языка, который вообще пригодится в реальном мире! -)

0 голосов
/ 22 июля 2009

Я рекомендую PHP / Java Bridge. Не позволяй имени обмануть тебя. Это можно использовать для подключения как PHP, так и Python к любой виртуальной машине ECMA-335 (Java и C #)!

http://php -java-bridge.sourceforge.net / PJB /

Чтобы ответить на ваш комментарий:

Связь работает в обоих направлениях, интерфейс JSR 223 можно использовать для подключения к работающему серверу PHP (Apache / IIS, FastCGI, ...), чтобы компоненты Java могли вызывать экземпляры PHP, а сценарии PHP могли вызывать CLR ( например, приложения на основе VB.NET, C #, COM) или Java (например, Java, KAWA, JRuby) или передача управления обратно в среду, откуда поступил запрос. Мост можно настроить для автоматического запуска внешнего интерфейса PHP или запуска внутреннего интерфейса Java / .NET, если это необходимо.

0 голосов
/ 21 июня 2009

Я сделал это с помощью PHP SOAP Server и клиента VB.Net. После подключения клиента VB.Net/C# к серверу (расположение файла WSDL) C # автоматически обнаружит все функции и все объекты, которые выставлены. Упрощение программирования.

Я бы также порекомендовал использовать NuSOAP, который мне показался более функциональным. http://sourceforge.net/projects/nusoap/

0 голосов
/ 21 июня 2009

Использование веб-сервисов звучит как наиболее подходящий способ для вашего сценария.

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