LINUX.ORG.RU

com/dcom -> what? -> ruby/python/whatever


0

0

В свете:

http://www.linux.org.ru/profile/dissident/view-message.jsp?msgid=1890287

и не только в этом свете, решил на всякий случай спросить тут, как лучше всего (с наименьшим количеством геморроя и собственных кривых костылей) сделать следующее:

1. Есть COM/DCOM сервер который предоставляет какую-то текстовую услугу. Все довольно просто: текст пришел на сервер, текст ушел с сервера. COM-интерфейсы точно работают, DCOM вроде да, но не знаю, было ли это все тестировано. В связи со своей глубоко win32-ориентированностью (C++, сериализация через MFC, множество ATL/WTL/etc кода) он должен запускаться на win32 (ну или в wine, что тоже не проверено).

2. Надо обеспечить к этому серверу OS-независимые клиенты, в частности например грубо говоря страничку, в которую можно ввести данные, получить от сервера ответ, показать данные. И разные другие клиенты. Хотелось бы чтобы они были OS-независимыми.

Как это наиболее просто сделать? Просто щупать сервер через DCOM кажется не представляется возможным, потому что DCOMа кроме как на win32 нет (или есть за деньги или я чего-то не знаю?). Обертки вокруг DCOMа в том же Питоне или Руби будут вызывать нативные функции, значит ничего из этого не выйдет. Говорят есть реализация DCOM на Яве?

Но Ява это всякий J2EE, а цели делать таких монстров нету. Для начала хватило бы rhtml+rb (для примера) или что-нибудь подобное в питоне/перле/да хоть пхп.

Я подумал, что наиболее правильно будет поместить винде с COM-сервером какую-то обертку, которую можно потом легко использовать на клиентах. Первое что пришло в голову это выкликать ATL Web Server в VS и потом сделать ему consume хоть в том же Руби. Из этого получается SOAP RPC и прочая.

Но может быть есть другие более правильные идеи? Меньше всего хочется писать свой код для этого самого what? (хотя бы даже вставлять его в места TODO). В идеале было бы иметь его автомагически. Не из лени а из желания не делать криво.

Возможно?

Python умеет вызывать COM. Так что можно сделать обертку твоего COM-сервера на Питоне, а внешний интерфейс этой обертки - на чем хочешь от HTTP до XML-RPC (мы использовали CORBA, через omniORBpy).

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

А не проще ли в таком случае таки click-click обертку в VS (как тот самый ATL WS)? А то получается как-то слишком вложенно. Если все равно на выходе будет что-то вроде RPC, то почему не использовать среду COM-сервера (VS, C++)? Какие реальные преимущества делать обертку в Python/Ruby/... кроме гипотетической потери производительности? Или ATL WS это что-то очень страшное? Я просто покликал, оно мне что-то сгенерировало, что я так понимаю нужно объединять c iis либо standalone веб-сервером, но вроде не выглядело так уж страшно....

dissident ★★
() автор топика
Ответ на: комментарий от tailgunner

COM-сервер вызывается так:

#import "progid:Блябля"
БлябляLib::Бляблябля

__uuidof(), CreateInstance() и т.д. Из нативных оберток (в смысле оберток работающих только на win32) Питоновых или других вызвать не проблема.

Хотя бы тут много информации:

http://www.oreilly.com/catalog/pythonwin32/chapter/ch12.html

Но есть ли смысл делать C++ -> Python* -> network -> Python*...

*Вместо Python подставь любимое

PS Вместо того чтобы сделать вот что-то впал в тяжелые думы...

dissident ★★
() автор топика
Ответ на: комментарий от dissident

Это:

> 2. Надо обеспечить к этому серверу OS-независимые клиенты

подразумевает, что интерфейс сервера должен стать OS-независимым. Мне было проще всего наваять для этого переходник CORBA<->COM. Если VS умеет генерировать обертки, имеющие OS-независимый интерфейс - используй, ради бога.

tailgunner ★★★★★
()
Ответ на: комментарий от dissident

> Но есть ли смысл делать C++ -> Python* -> network -> Python*...

А у тебя есть выбор? Какой? :)

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

> Мне было проще всего наваять для этого переходник CORBA<->COM.
Меня пугают эти ужасные слова. ;) На самом деле вариантов получается целое множество:

1. Мучаться с ATL WS'ами (SOAP и т.д.) и другими обертками в C++.
2. Сделать обертку в C# и использовать какое-то более простое RMI
3. Сделать переходник CORBA<->COM в чем? В C#,C++,Python,..
4. Сделать обертку в Python в какое-нибудь простое RPC

Глаза разбегаются.. Последнее вроде бы самое простое.

> Если VS умеет генерировать обертки, имеющие OS-независимый интерфейс -
> используй, ради бога.
Чтоб я знал. Я просто выкликал что-то Add New Item -> ATL Web Server и оно что-то нагенерировало. Что с этим делать не совсем понятно, но это вроде как веб сервер, вроде как SOAP и вроде бы это можно консумировать из чего угодно.

dissident ★★
() автор топика
Ответ на: комментарий от dissident

> 1. Мучаться с ATL WS'ами (SOAP и т.д.) и другими обертками в C++.

Отпадает, потому что ты не знаешь, что делать с нагенерированным средой кодом :)

> 2. Сделать обертку в C# и использовать какое-то более простое RMI

И эти люди думают о том, стоит ли делать "C++ -> Python* -> network -> Python" :D

А варианты 3 и 4 - это примерно одно и то же, выбор только конкретного вида RPC :) Если ты знаком с CORBA, делай CORBA, если нет - делай то, с чем знаком (XML-RPC, SOAP, HTTP).

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/81254

Хмм это не выглядит так уж страшно. Возможно действительно COM->CORBA в чем-нибудь высокоуровневом это наиболее логичное решение. Тем более что Питона в коде этого COM-чуда есть.

dissident ★★
() автор топика
Ответ на: комментарий от dissident

> Хмм это не выглядит так уж страшно.

Порог вхождения в CORBA всё-таки есть. Если у тебя мало времени, придерживайся знакомых технологий.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

То есть так или иначе вопрос в конце концов упирается в CORBA vs SOAP... Оба buzz-word'ы, оба энтэрпрайз...

dissident ★★
() автор топика
Ответ на: комментарий от tailgunner

> Важное дополнение - COM-сервер должен поддерживать Automation.
Таки погуглил и оказалось это всего лишь означает поддержку IDispatch. :) Да, поддерживает IDispatch.

dissident ★★
() автор топика
Ответ на: комментарий от dissident

>То есть так или иначе вопрос в конце концов упирается в CORBA vs SOAP... Оба buzz-word'ы, оба энтэрпрайз...

SOAP все же проще. Да и со всякими быдлоклиентами на дельфе работает на ура.

signal
()
Ответ на: комментарий от tailgunner

>Ты работал с обоими? Если да, то на каких языках?

на клиенте java/delphi, на сервере java. Скажу сразу - с корбой я работал гораздо меньше.

signal
()
Ответ на: комментарий от signal

> SOAP все же проще.
К SOAP'у нужен web-server. Даже в том нагенерированном VS коде его надо к чему-то прикрутить (IIS, apache, VS'овый exe). Понятно что web-server это 100 строчек, но тем не менее. Пример с использованием корбы в питоне вроде бы не требовал концептуально никаких дополнительных частей?

dissident ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.