Конференция "Базы" » Multi-tier + DCOM
 
  • DeadMeat (01.10.08 09:54) [0]
    Здравсте.
    Вообщем проблема вот в чем. Пытаюсь освоить трех звенку. Почитал хелп.. Почитал инет.
    Вроде понял куда и чего надо делать, чтобы оно заработало.
    Решил делать через DCOM.
    На локальной машине все работает (когда и сервер и клиент на ней). Причем не важно, есть ли Делфи на этой машине или нет. Т.е. с midas.dll вроде разобрались.
    А вот когда сервер на одной машине (Win2k3), а клиент на другой, уже проблема. Клиент не видит "сервер". Т.е. указываю имя компьютера, а то, что на нем крутится сервер, клиент не видит.
    Вроде проблема в правах. Пытался поковырять dcomcnfg. Выставил все права на Everyone (остальные удалил) на полный контроль (где нашел). Не помогло.
    Запускал даже на контроллере домена (без настройки прав, т.е. по дефолту). При этом клиентская машина была включено в него и пользователь был членом Domain Admins.
    Регистрировал сервер через /regserver.
    В списке зарегистрированных он появляется. Но клиент все равно не видит его.
    Что надо еще прописать или настроить, чтобы они друг-друга увидели?
  • Сергей М. © (01.10.08 11:00) [1]

    > Регистрировал сервер через /regserver


    На обоих хостах регистрировал ?
  • DeadMeat (01.10.08 11:53) [2]

    > Сергей М. ©   (01.10.08 11:00) [1]

    Не понял вопроса.
    Регистрировал только на сервере.
    Или вы про вариант, когда на одном компьютере? Тогда тоже регистрировал.
    Может я не так понял? На клиенте тоже надо регистрировать чтоли?
  • clickmaker © (01.10.08 12:41) [3]
    > На клиенте тоже надо регистрировать чтоли?

    естественно. DCOM работает с GUIDами, которые должны быть прописаны в реестре на клиенте.
    Зарегистрируй библиотеку типов tlb на клиенте
  • DeadMeat (01.10.08 13:45) [4]
    Дико извиняюсь, но не догоняю.
    Как зарегистрировать библиотеку не понял. Как импортировать понял. Зачем - не понял.
    Я думал там все проще. Клиент подключается к серверу и....
    Может где есть почитать именно про эту часть 3х звенки?
    А то толком не нахожу инфу. Везде только про создание на одной машине. А про нюансы "распределения" на разные компьютеры - не нахожу.
  • clickmaker © (01.10.08 14:29) [5]
    > Как зарегистрировать библиотеку не понял

    delphi/bin/tregsrv yourtypelib.tlb
    можно и программно - RegisterTypeLib() при первом запуске клиента
  • DeadMeat (01.10.08 15:36) [6]
    Блин. Или я туплю... Или что.
    Вообщем рассказываю как делал ПО ШАГАМ.

    Сервер:
    Создал приложение.
    Добавил в него TRemoteDataModule. Дал ему имя. Instancig - Multiple. Threading Model - Netrual.
    На него бросил ADOConnection, ADODataSet, DataSetProvider1.
    Настроил их друг на друга и вписал строку запроса.
    Сохранил. Откомпилил. Перебросил на другой компьютер (он же контроллер домена) ЕХЕ файл и midas.dll.
    midas.dll бросил в Windows\System32 и сделал regsvr32.exe midas.dll
    Мне сказало, что ОК.
    Далее запустил свой сервер с параметром /regserver.
    Посмотрел в dcomcnfg - он там появился.

    Клиент:
    Создал приложение.
    На форму бросил DCOMConnection1, ClientDataSet1, DataSource1, DBGrid1.
    Настроил их друг на друга.
    У DCOMConnection1 свойство ComputerName выставил в имя моего сервера (компьютера). Решил выбрать (в дизайн тайме) ServerName - пусто.

    Теперь что начал делать по вашим советам.
    Сделал clickmaker ©   (01.10.08 14:29) [5] на клиенте.
    Не помогло.
    Сделал еще и на сервере.
    Не помогло.
    tbl файл брал от моего сервера. После компиляции там в папке создался.

    Что я упустил или сделал не так??
  • clickmaker © (01.10.08 17:15) [7]
    при вызове DCOMConnection1.Open лезут какие-либо исключения?
    сервер и клиент в одном домене?
    на серваке есть доступ к этому COM-серверу у запускающего юзера на клиенте? (Security - Access permissions - Customize)
    сервер - это обычный экзешник или сервис?
  • DeadMeat (01.10.08 17:24) [8]

    > clickmaker ©   (01.10.08 17:15) [7]


    > при вызове DCOMConnection1.Open лезут какие-либо исключения?

    Собсна до этого не доходит, т.к. я в данный момент пытаюсь в дизайн тайме настроить ServerName и другие параметры.


    > сервер и клиент в одном домене?

    Да.


    > на серваке есть доступ к этому COM-серверу у запускающего
    > юзера на клиенте?

    Везде, где нашел, поставил Everyone на полный доступ и еще добавил Domain Admins (коим являюсь я) и Domain Users.


    > сервер - это обычный экзешник или сервис?

    Просто обычный ЕХЕ с обычной Формой.
  • Сергей М. © (01.10.08 17:33) [9]

    > обычный ЕХЕ с обычной Формой.


    Зачем серверу форма ? Кто на нее глазеть-то будет ?)

    Ты бы потренировался что-ли на, скажем, Excel'е как на удаленном COM-сервере - при прочих равных условиях он хотя бы корректно регистрируется, так что при правильной настройке DCOM-конфигурации удаленный доступ к нему (см. CreateRemoteCOMObject) обычно не вызывает проблем.
  • clickmaker © (01.10.08 17:59) [10]
    > Собсна до этого не доходит, т.к. я в данный момент пытаюсь
    > в дизайн тайме настроить ServerName и другие параметры

    ты читал про ServerName в справке? Что там про реестр написано?
    Используй ComputerName в рантайме
  • DeadMeat (01.10.08 18:41) [11]

    > Сергей М. ©   (01.10.08 17:33) [9]


    > Зачем серверу форма ? Кто на нее глазеть-то будет ?)

    Ну как же!! А фишечки рюшечки? Я на нее еще скины повешу!! (шука конечно).
    Это только сейчас у него форма. Пока я просто пытаюсь понять что и как.


    > Ты бы потренировался что-ли на, скажем, Excel'е как на удаленном
    > COM-сервере - при прочих равных условиях он хотя бы корректно
    > регистрируется, так что при правильной настройке DCOM-конфигурации
    > удаленный доступ к нему (см. CreateRemoteCOMObject) обычно
    > не вызывает проблем.

    Блин... Видимо придется начать оттуда, если ничего не выйдет так.


    > clickmaker ©   (01.10.08 17:59) [10]


    > ты читал про ServerName в справке? Что там про реестр написано?

    Собсна написано там вот что:
    For DCOM and OLEnterprise connections, the servers must be registered in the system Registry.
    И все. А как эту регистрацию провести и куда в реестре писать - ни слова.


    > Используй ComputerName в рантайме

    Не совсем понял, что это дает. Мне бы в дизайн тайме в начале получить соединение, чтобы легче и наглядней было создать остальные ClientDataSet'ы и другие настройки просто выбирая параметры из списка.
  • clickmaker © (01.10.08 18:47) [12]
    так ComputerName же тоже паблишед. Чего бы его не установить в дизайн тайме?
  • DeadMeat (02.10.08 08:15) [13]

    > clickmaker ©   (01.10.08 18:47) [12]

    Опять не понял. Дык я же все делаю в дизайн тайме.
  • Сергей М. © (02.10.08 09:14) [14]

    > DeadMeat   (02.10.08 08:15) [13]


    т.е. ты выбрал имя компьютера, а список ServerName пустой ?
  • DeadMeat (02.10.08 09:22) [15]

    > Сергей М. ©   (02.10.08 09:14) [14]

    Именно. А при тех же действиях, но на локальном компьютере (тоже в дизайн тайме) в нем появляется имя моего дата модуля. Т.е. чтото гдето не зарегистрировано это точно. Но я сделал все, как тут писали и это не помогло.
  • Сергей М. © (02.10.08 09:36) [16]

    > DeadMeat   (02.10.08 09:22) [15]
    >
    >


    Предлагаю самостоятельно разобраться в происходящем, внимательно изучив текст процедуры MConnect.GetMIDASAppServerList
  • DeadMeat (03.10.08 10:05) [17]

    > Сергей М. ©   (02.10.08 09:36) [16]

    Последовал вашему совету. Правда почему то мой дебагер в этот юнит не заходит, поэтому пришлось изучать "на глаз".
    Если я правильно понял, то оно ищет (используя GetServerList) в реестре CLSID. Руками поискав в реестре (на предмет ГУИДа моего сервера) я нашел что он там есть. Появляется после регистрации tlb файла и "уходит" после анрегистрации (не знаю как правильно это по русски).
    Вот собсна и все, что я понял..
    Может в службе какой проблема? Может в правах? Хотя права я крутил как только мог.
  • Сергей М. © (03.10.08 10:15) [18]

    > почему то мой дебагер в этот юнит не заходит


    Потому что в опциях отладки в св-вах проекта должна быть установлена опция "Use Debug DCU's".

    Use Debug DCUs
    The Debug DCUs contain debug information and are built with stack frames. When this option is checked, the compliler prepends the Debug DCU path (specified in Tools|Debugger Options on the General page) to the unit Search path specified in Project|Options on the Directories/Conditionals page.
  • Сергей М. © (03.10.08 10:32) [19]
    То что список ServerName у тебя пустой (в дизайн-тайм или в ран-тайм - не важно) говорит только об одном - фабрика класса твоего MIDAS-сервера не зарегистрирована (или зарегистрирована некорректно) на том компьютере, на котором вызывается метод TDispatchConnection.GetServerList, т.е. на компьютере, где работает контроллер твоего MIDAS-сервера.
 
Конференция "Базы" » Multi-tier + DCOM
Есть новые Нет новых   [134474   +34][b:0][p:0.001]