Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не работает DCOM по сети. Неизвестный интерфейс, Маленькая программка 
:(
    Опции темы
barsdm
  Дата 9.3.2009, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 9.3.2009
Где: Екатеринбург

Репутация: нет
Всего: нет



Сервер и клиент на C++ Builder 2006.
Сервер - пустая форма + Remote Data Module с ADOQuery и DataSetProvider. Соединяется с MySQL.
Клиент - набор компонентов для отображения данных. Подключение выполняется так:

Код

DCOMConnection1->ComputerName = "172.16.1.21";
DCOMConnection1->ServerGUID = "{8D964D2D-0436-4FB0-B821-B6B003144B93}";
DCOMConnection1->Connected = true;
ClientDataSet1->Active = true;


На последней строке выдаётся ошибка "Неизвестный интерефейс". При этом на сервере программа запускается.
Если клиент и сервер работают на одной машине, то проблем не происходит, данные появляются в таблице.
Права доступа на сервере для используемого компонента настроены на полный доступ пользователю на машине клиента.

Почему возникает ошибка через сеть, но работает, если ComputerName = "localhost"?
PM MAIL   Вверх
Любитель
Дата 9.3.2009, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: нет
Всего: 92



Цитата(barsdm @  9.3.2009,  21:02 Найти цитируемый пост)
Права доступа на сервере для используемого компонента настроены на полный доступ пользователю на машине клиента.

Ты коннектишься через IP, а права небось давал для NetBIOS-имени. Это раз. А второе - ты уверен, что на сегодня DCOM будет лучшим решением? ;)


--------------------
PM MAIL ICQ Skype   Вверх
barsdm
Дата 9.3.2009, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 9.3.2009
Где: Екатеринбург

Репутация: нет
Всего: нет



Права я давал через оснастку Службы компонентов, Настройка DCOM, свойства компонента, и на вкладке Безопасность поставил все права для пользователя. NetBIOS-имя я там никак не указывал. Я создал на сервере пользователя с тем же имененем и паролем, что и пользователь, под которым запускается клиентская программа.
А насчёт того, что DCOM уже неактуальна или вовсе не была такой, я не знаю. А что лучше использовать вместо неё? Просто изучаю по книжке... там написано, что "пожалуй, наиболее универсальный вариант - технология DCOM".
PM MAIL   Вверх
Любитель
Дата 9.3.2009, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: нет
Всего: 92



Цитата(barsdm @  9.3.2009,  21:36 Найти цитируемый пост)
Я создал на сервере пользователя с тем же имененем и паролем, что и пользователь, под которым запускается клиентская программа.

Ээ.. Я правильно понял - ты дал права локальному пользователю другой машины?


--------------------
PM MAIL ICQ Skype   Вверх
barsdm
Дата 10.3.2009, 00:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 9.3.2009
Где: Екатеринбург

Репутация: нет
Всего: нет



Да, правильно. Компьютеры не входят в домен. Могу выбирать только из локальных пользователей
PM MAIL   Вверх
Любитель
Дата 10.3.2009, 01:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: нет
Всего: 92



Ну.. может я что-то не понимаю в виндовом управлении правами, но, по-моему, это абсолютно разные юзеры smile Выбирать в диалоге - да, конечно, не можешь. Ибо нет доступа к AD. Вариант в лоб (для начала) - дай доступ Everyone-у. На remote launch and activation. А потом - посмотрим.


--------------------
PM MAIL ICQ Skype   Вверх
barsdm
Дата 10.3.2009, 01:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 9.3.2009
Где: Екатеринбург

Репутация: нет
Всего: нет



Дал права для Все на всё. Не помогло.
PM MAIL   Вверх
Любитель
Дата 10.3.2009, 02:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: нет
Всего: 92



Хорошо. А COM-интерфейс сервера зарегистрирован на обоих машинах?


--------------------
PM MAIL ICQ Skype   Вверх
barsdm
Дата 10.3.2009, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 9.3.2009
Где: Екатеринбург

Репутация: нет
Всего: нет



На сервере регистрацию я выполнял запуском серверной программы с параметром /regserver. Там она зарегистрирована и всё работает, если запускать клиент там же. На клиенте я пробовал тоже зарегистрировать этот компонент. Ничего не изменилось.
Возможно, я не понимаю какого-то порядка регистрации. Есть ли где-то описание этого? Нужно ли настраивать что-либо на клиенте, настраивать вкладку Расположение? Я пробовал оставить один параметр "Запустить приложение на указанном компьютере" и указал там компьютер-сервер, но это не помогло.

Это сообщение отредактировал(а) barsdm - 22.3.2009, 01:42
PM MAIL   Вверх
xvr
Дата 16.3.2009, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



На клиенте должен быть зарегистрирован proxy от сервера. Обычно это какая то dll, рядом с сервером (если генерилось VS, то что то типа <имя сервера>ps.dll)

PM MAIL   Вверх
barsdm
Дата 20.3.2009, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 9.3.2009
Где: Екатеринбург

Репутация: нет
Всего: нет



Компилировал в билдере, dll у меня нет. Я попробовал написать другую программу и подключил к ней клиента через dcom, там всё отлично работает. Только там не используется datasetprovider и dcomconnection. Так что скорее всего проблема не в настройках Службы компонентов, а не знаю в чём...   smile  в чём-то, связанном с компонентами данных.

Нашёл 2 точно такие же темы на других форумах:
http://borland.xportal.ru/forum/viewtopic.php?t=1074
http://forum.codenet.ru/archive/index.php/t-22626.html
Попробовал их решения, но это не помогло.

Это сообщение отредактировал(а) barsdm - 20.3.2009, 23:29
PM MAIL   Вверх
xvr
Дата 21.3.2009, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



А если сервер перенести к клиенту он работает?
Кстати, настраивать на клиенте местоположение сервера через dcomcnfg не нужно - у тебя сервер явно создается на машине 172.16.1.21
Еще можно порекомендовать запустить клиента под COM снифером - посмотреть какого именно интерфейса он не нашел

Еще вариант - запустить клиента локально (под отладчиком), потом посмотреть какие dll он загрузил (список модулей), посмотреть, каких из них нет на отдельной машине с клиентом, принести и зарегистрировать (на всякий случай)


Это сообщение отредактировал(а) xvr - 21.3.2009, 09:43
PM MAIL   Вверх
barsdm
Дата 21.3.2009, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 9.3.2009
Где: Екатеринбург

Репутация: нет
Всего: нет



После переноса серверной части на клиентский компьютер всё равно возникает такая же ошибка. Похоже на то, что какого-то файла там не хватает. Попробую посмотреть, какие файлы есть на сервере и чего нет на клиенте.
PM MAIL   Вверх
barsdm
Дата 21.3.2009, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 9.3.2009
Где: Екатеринбург

Репутация: нет
Всего: нет



После установки borland на клиенте всё начинает работать... и локально, и через сеть.
Посмотрел загружаемые dll, файлы, обращения к реестру. После установки билдера появляется интерфейс IAppServer {1AEFCC20-7A24-11D2-98B0-C69BEB4B5B6D}, к которому обращаются программа. 
Как можно правильно зарегистрировать всё это без установки билдера? midas.dll регистрировал, но это не даёт результата.
PM MAIL   Вверх
xvr
Дата 22.3.2009, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Посмотрите через dcomcnfg куда смотрит IAppServer - это и надо зарегистрировать  smile 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: COM/DCOM/ActiveX/ATL/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0957 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.