![]() |
|
![]() ![]() ![]() |
|
Alexander8 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 6.7.2010 Репутация: нет Всего: нет |
Здравствуйте!
Подскажите, пожалуйста, как поступить в такой ситуации. Есть ПО: windows-сервер и windows-клиенты, общающиеся по RPC-протоколу. RPC-часть сгенерированна при помощи MIDL-компилятора. Появилась необходимость портировать клиента на linux (хотя бы часть функционала), сервер останется на windows. Более того, значительные изменения сервера нежелательны, тем более перевод его на какую-нибудь кроссплатформенную реализацию rpc-технологию. Вопрос в том, как с линукс-платформы клиентом вызвать нужную rpc-функцию с windows-сервера? В принципе, везде написано, что такие вещи возможны, но как это сделать нигде не уточняется. ![]() Я смотрел в сторону rpcgen-а, но он только для линукса. В сторону FreeDCE, сначала думал, что нашел то, что надо, но, к сожалению проект мертв, документации мало. Удалось dceidl-ом скомпилировать интерфейс, даже "прибиндиться" к серверу, но вот при вызове rpc-функций клиент падает. Да и dceidl не поддерживает некоторые вещи (хотя и не это главное). Также посмотрел и widl (эмуляция rpc от wine). Wine клиента, кстати, без проблем гоняет. Но нужен родной линуксовый. В общем, нужна технолгия, которая позволит подружить rpc-часть linux-клиента и уже существующего win-сервера. Чтобы конкретизировать вопрос, пусть есть вымышленный интерфейс, по которому общаются виндовый сервер и клиенты:
Как мне и с линукса общаться с вин-сервером по данному интерфейсу? Буду очень благодарен за помощь. |
|||
|
||||
icecrashldr |
|
|||
![]() Developer ![]() Профиль Группа: Участник Сообщений: 122 Регистрация: 5.7.2010 Репутация: нет Всего: нет |
||||
|
||||
Alexander8 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 6.7.2010 Репутация: нет Всего: нет |
Ну так я же написал про все это.
FreeDCE - это мертвый проект, нет ни документации, ни форумов. Я пробовал его:
В сети из информации одни только баг-репорты. По поводу CORBA: Конечно, если писать проект с нуля, то можно взять ее или ACE, или еще что-нибудь. Но в моей ситуации сервер и клиенты виндовые уже написаны и работают не один год. Поэтому вариант переписать сервер и клиентов отпадает. |
|||
|
||||
icecrashldr |
|
|||
![]() Developer ![]() Профиль Группа: Участник Сообщений: 122 Регистрация: 5.7.2010 Репутация: нет Всего: нет |
Alexander8 тогда вам остается google.ru
|
|||
|
||||
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 5 Всего: 118 |
CORBA-а зло, поверьте мне! Есть куда как более привлекательные протоколы (soap например)... насколько я знаю, даже в java от нее отказались почти...
В общем я предлагаю вам написать proxy (читать про паттерн в гугле), который будет транслировать SOAP запросы (gSOAP можно взять) в запросы виндового rpc и обратно. Конечно, этот самый прокси будет стоять на винде, но это вам будет проще как с т.з. отладки, так и со стороны разработки. -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
Alexander8 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 6.7.2010 Репутация: нет Всего: нет |
Спасибо за ответы.
Это действительно хорошая идея и она уже была реализована несколько раньше. Только там был не SOAP-протокол, но все остальное точь в точь. Конечно, прокси создает дополнительную нагрузку, но работает все это хорошо. Дело вот в чем: Компании, где я работаю, для охвата заветных 100% рынка нужно получить 2-3% линукс-клиентов (специфика работы такова, что их именно столько). Т.е. скорее маркетинговый ход, чем реальная необходимость. С моей сторону нужно либо сделать это, либо доказать, почему это сделать нельзя. Сделать хочется, это интересно, да и опыт хороший. Но вот с информацией пока тяжело. ![]() |
|||
|
||||
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 5 Всего: 118 |
Alexander8, доказывать проще простого. Говорите менеджерам сколько вы еще потратите время на совсем не нужные вещи и сколько им это будет стоить - остальное они сами додумают 8)
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
Alexander8 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 6.7.2010 Репутация: нет Всего: нет |
jonie, как вариант.
Вообщем, я решил потратить еще какое-то время (может недельку) на изучение этого вопроса, благо срочной работы сейчас немного. =================== Просто мысли вслух. Честно говоря, вот что удивляет. RPC - идея, которая задумывалась для обеспечения удаленного вызова процедур, не сильно волнуясь о том, какие компьютеры это делают. Т.е. не очень важно, что за платформа, какая система, скольки битная, какие соглашения о вызовах там используются. А получается, что это очень существенно. И если не использовать специальные реализации типа CORBA и т.д., то не выходит даже по простейшему интерфейсу сконнектиться разными системами. Получается, как бы "вещь в себе", работает в рамках одной и той же реализации. |
|||
|
||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: нет Всего: 135 |
Alexander8, а с каких пор мелкоМягкие задумывают очередную технологию, которая
>> не очень важно, что за платформа, какая система, скольки битная, какие соглашения о вызовах там используются. ? Ни одной не припомню ( не значит, что не было, просто не помню ) -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
Alexander8 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 6.7.2010 Репутация: нет Всего: нет |
borisbn, я и сам не могу назвать сходу такой технологии.
Если не считать различные ухищрения типа C# и Mono, Pascal и Lazaurus, но это все-таки уже не то. Потому что это делается не майкрософт, а третьими лицами. Но rpc - это ведь не их технология. Из вики:
Хотя, по большому счету, Вы правы. Их реализация получилась не совместимой с остальными. Жалко, что нет единого стандарта на все это дело. |
|||
|
||||
Alexander8 |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 6.7.2010 Репутация: нет Всего: нет |
Вы знаете, похоже, что я незаслуженно обидел FreeDCE.
![]() Потратив на него два дня, я смог добиться достаточно неплохих результатов. Было много проблем, главные: "out" переменные и size_is. К сожалению, конструкции вида
недопустимы по целому ряду причин: 1) size_is во freedce не поддерживает формата size_is(a, b) 2) для параметров size_is применимы только "in" параметры данной функции (это, конечно, как минимум странно). Но все их удалось обойти. Есть у меня такой тестовый интерфейс:
Все прекрасно работает в паре с win-сервером. Если интересно, то код линукс-клиента тоже могу привести. Вообще говоря, в моем случае не удастся совсем обойтись без измения имеющегося интерфейса сервера, но нужно будет всего лишь написать обертки над некоторыми rpc-функциями, которым параметры просто будут прилетать в другом формате, а потом они будут вызывать существующие функции. Это уже мелочи. ![]() Это сообщение отредактировал(а) Alexander8 - 15.7.2010, 13:00 |
||||||
|
|||||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: COM/DCOM/ActiveX/ATL/CORBA | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |