![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Multi-tier + DCOM
DeadMeat © (2008-10-01 09:54:00)Здравсте.
Вообщем проблема вот в чем. Пытаюсь освоить трех звенку. Почитал хелп.. Почитал инет.
Вроде понял куда и чего надо делать, чтобы оно заработало.
Решил делать через DCOM.
На локальной машине все работает (когда и сервер и клиент на ней). Причем не важно, есть ли Делфи на этой машине или нет. Т.е. с midas.dll вроде разобрались.
А вот когда сервер на одной машине (Win2k3), а клиент на другой, уже проблема. Клиент не видит "сервер". Т.е. указываю имя компьютера, а то, что на нем крутится сервер, клиент не видит.
Вроде проблема в правах. Пытался поковырять dcomcnfg. Выставил все права на Everyone (остальные удалил) на полный контроль (где нашел). Не помогло.
Запускал даже на контроллере домена (без настройки прав, т.е. по дефолту). При этом клиентская машина была включено в него и пользователь был членом Domain Admins.
Регистрировал сервер через /regserver.
В списке зарегистрированных он появляется. Но клиент все равно не видит его.
Что надо еще прописать или настроить, чтобы они друг-друга увидели?
DeadMeat (2008-10-07 21:45:00) [1]> [44] Сергей М. © (07.10.08 20:38)
Ясно... понял. Еще раз благодарю за инфу.
Сергей М. (2008-10-07 20:38:00) [2]
> спаривать одно с другим надо уже самому. Так?
>
Именно.
И статья с примером от Набережных С. (С) это недвусмысленно и на огурцах демонстрирует.
Мало еще какие выкрутасы могут существовать, которые Борланд не мог предусмотреть (или не посчитал нужным, дабы не потакать дурацким прихотям всяк входящего), разрабатывая свое IDE !)
DeadMeat (2008-10-07 12:04:00) [3]
> Сергей М. © (07.10.08 11:11) [42]
Я про регистрацию COM сервера в службе.
Если я правильно (надеюсь хоть в этот раз) понял, то IDE предоставляет возможности для:
1. создания полноценной службы
2. создания полноценного COM сервера
А вот спаривать одно с другим надо уже самому. Так?
Сергей М. (2008-10-07 11:11:00) [4]
> все делать ручками?
Делать что?
О регистрации чегов дан.случае ты ведешь речь ?
DeadMeat (2008-10-07 11:07:00) [5]
> Сергей М. © (07.10.08 11:03) [40]
Другими словами, таки все делать ручками?
Сергей М. (2008-10-07 11:03:00) [6]
> DeadMeat (07.10.08 10:32) [39]
В случае когда сервис реализует COM-сервер, IDE в части регистрации COM-сервера идет лесом - регистрация сервера в ROT происходит в ран-тайм.
DeadMeat (2008-10-07 10:32:00) [7]
> Сергей М. © (07.10.08 10:24) [38]
Конкретно именно громоздоксть всей процедуры регистрации и установки. Т.е. то, что надо делать руками. Именно это и хотелось бы заменить на нечто, более "штатное" чтоли. С одной стороны это может показаться некой глупостью и детским садом, т.к. по сути один раз сделал и забыл. Но тем не менее..... Не могу поверить, что IDE не предоставляет подобных инструментов или визардов (нет нет.. я не избалованный батонокидатель)..
Но если таких (более "стандартных") средств нет, то конечно будем делать так... но "осень ни хоца" ©
Сергей М. (2008-10-07 10:24:00) [8]Понятно.
И что тебя в примере от Набережных С. (с) не устраивает конкретно ?
DeadMeat (2008-10-07 10:20:00) [9]
> Сергей М. © (07.10.08 08:33) [36]
Даже не знаю... С утра сижу и пытаюсь добавить сюда пост. Потом доперло... скорее всего спаморезка не пускает сразу много ссылок.
Здесь раз: delphimaster.ru/cgi-bin/forum.pl?id=1190904445&n=8
Оттуда два: delphimaster.ru/cgi-bin/forum.pl?id=1158154010&n=8
И там три: delphikingdom.info/asp/answer.asp?IDAnswer=54223
Рядом четыре: kladovka.net.ru/index.cgi?pid=dir&rid=24
Я их не проверял, но примерную суть понял. Все же чтото "постандартней" хотелось бы...
Сергей М. (2008-10-07 08:33:00) [10]
> Пример из кладовки и одну из соответствующих тем на Королевстве
> смотрел
Ссылки приведи ..
DeadMeat (2008-10-06 18:19:00) [11]Так... С этим разобрались. Все работает. Все прекрасно (еще раз спасибо за помощь).
Теперь такой вопрос возник. Как этот сервер подружить с сервисом?
Вопрос именно в более-менее "стандартной" дружбе.
Т.е. регистрация COM объекта руками через WinAPIшные команды это я понял. Нашел как и где. Но вот не хотелось бы к такому прибегать. Хочется стандартное чтото. Чтобы свои штатные IDEшные средства.
Как например /regserver (ну почти IDEшное).
Просто в сервисе такое уже не прокатывает, как я понял. Службу та я создаю, а вот как зарегистрировать мой COM сервер "в ней".
Ожидаемое поведение такое:
инсталляция службы в систему
в процессе инсталяции службы, регистрация COM сервера
запуск службы
обращение клиента к COM серверу, не вызывающее повторного запуска ЕХЕ файла последнего (как при обычной регистрации сервера без службы)
деинсталяция службы, дерегистрация COM сервера
Повторюсь, хотелось бы найти штатные IDEшные или Делфийские средства, а не изощраться спаривая оных с WinAPIшными.
Я конечно понимаю, что Делфийские так или иначе вызывают WinAPIшные... но вот такое вот странное у меня желание.
ЗЫ. Пример из кладовки и одну из соответствующих тем на Королевстве смотрел. Это как раз то, чего хотелось бы избежать.
DeadMeat (2008-10-04 10:41:00) [12]> [33] Сергей М. © (04.10.08 09:44)
Ну тупой... ну бывает.. ну что вы сразу. ;)
Просто меня постоянно сбивало с толку то, что в дизайн тайме у меня даже чисто с гуидом ничего не получалось. Я то проверял и этот вариант тоже. Но видать чего-то в другом месте было намучено и не срабатывало.
Теперь все ясно. Теперь хотя бы не буду ждать того поведения, которое ожидал.
Так или иначе...
ОГРОМНОЕ СПАСИБО за потраченное на меня время. Знаю, это не легко.
Благодарю еще раз... вопрос закрыт.
Сергей М. (2008-10-04 09:44:00) [13]
> Руками записывать данные в реестр (не хотелось бы)
Что-то ты тормозишь откровенно)
В "боевых" условиях никакой регистрации сервера в реестре на кл.стороне не требуется !
Если твой боевой клиент знает GUID сервера - этого вполне достаточно.
DeadMeat (2008-10-03 17:35:00) [14]
> Сергей М. © (03.10.08 15:47) [31]
> Эту регистрацию можно сделать как запустив однократно приложение-
> сервер на лок.машине (после чего его исп.модуль на лок.машине
> впредь более не понадобится), так и внеся вручную соотв.
> записи в реестр.
Ага.. Вот в этом и проблема. Т.к. запустив его просто так, записи не добавились. Пришлось его именно регистрировать. Возникает вопрос, добавлять эти записи (тот ключ, которого не достает) вручную (в смысле самому в реестр) или есть штатный способ для этого? Не таскать же с клиентом постоянно сервер.
Вот в реальной ситуации уже при установке. Надо у заказчика (допустим) развернуть эту систему.
Примерные действия (на мой взгляд):
на машине сервере установка серверной части, путем ее регистрации (/regserver)
на машине клиенте установка клиентской части, путем ее регистрации
Вот второй пункт вызывает проблемы. Руками записывать данные в реестр (не хотелось бы) или использовать какой-то штатный способ для этого (хотелось бы)?
Сергей М. (2008-10-03 15:47:00) [15]Нет, не правильно. Точнее - не совсем правильно.
Сам сервер (т.е. его исп.модуль) у себя на лок.машине нужно иметь лишь для отладочных целей, в условиях когда удаленная его отладка невозможна и/или нежелательна. При этом его регистрация у себя на лок.машине, разумеется, обязательна.
Сервер можно отлаживать и удаленно. В этом случае его регистрация обязательна только на удаленной машине. На локальной же машине регистрация фабрики класса сервера будет нужна только для разрешения имени в адрес, если таковая нужна. Эту регистрацию можно сделать как запустив однократно приложение-сервер на лок.машине (после чего его исп.модуль на лок.машине впредь более не понадобится), так и внеся вручную соотв.записи в реестр.
Ну а в рантайм или в дизайнтайм происходит фактическое обращение к серверу (где бы он ни находился фактически) - это не имеет принципиально никакого значения.
DeadMeat (2008-10-03 15:35:00) [16]
> Сергей М. © (03.10.08 15:20) [29]
Ну насчет GUIDов и IPов все понятно. Я имею ввиду, правильно-ли то, что я понял? Что для процесса разработки (т.е. в дизайн тайме) надо иметь сервер у себя на локальной машине, а перебросив его на другую, делать только все только в рантайме?
Сергей М. (2008-10-03 15:20:00) [17]
> подключение уже делать по заранее записанному GUIDу или
> имени сервера
Серверной стороне имя MIDAS-сервера не нужно - она работает только с GUID.
Имя MIDAS-сервера нужно только клиентской стороне, если угодно - как минимум для удобства восприятия пользователем и/или программистом. Согласись, гораздо удобнее оперировать осмысленными именами, нежели длиннющей строкой лишенных смысла символов. Подобно тому как обращаться к хостам в Интернете неизмеримо удобней осуществлять по их доменным именам, а не по IP-адресам, хотя фактическое обращение осуществляется именно по IP-адресам, а функции разрешения имени в адрес возлагаются на распределенную DNS-систему.
Так вот разрешением имени в GUID как раз и заведуют соответствующие рег.записи в реестре. Если их нет, то разрешение невозможно.
DeadMeat (2008-10-03 14:59:00) [18]Блин извиняюсь... с тэгами напутал. После обеда голова слабо соображает.
DeadMeat (2008-10-03 14:58:00) [19]
> Сергей М. © (03.10.08 12:51) [24]
</I
> Так тебе об этом давным-давно вроде бы уже сказано, см.
> [1])
>
Просто странно, регистрировать рабочий готовый (ну таким он когда-то будет) сервер на клиенте. А оказывается я просто не так понял саму суть работы.
Я же в начале часик другой сидел просто и читал эту справку, прежде чем вообщем чтото делать.
Но видимо не так понял эту часть.
Надеюсь щас я правильно понимаю, что для дизайн тайма надо регить у себя и всю программу делать и отлаживать только на одном хосте, а потом раскинув на разные компьютеры подключение уже делать по заранее записанному GUIDу или имени сервера? Так выходит?
Просто я думал, что в дизайн тайме можно и с удаленным работать..... Это видать меня и сбило с толку.
Все верно?
Сергей М. (2008-10-03 13:27:00) [20]Т.е. для рантайм-работы регистрация удаленного сервера в реестре на стороне локального клиента вообще не нужна - обращение к удаленной машине-серверу с целью создания там экз-ра COM-сервера происходит с использованием CLSID.
Этот CLSID ты можешь указать явно ручками, а можешь получить его из реестра по имени, если такая инф-ция там имеется в результате автоматической (см. выше цитату из справки) или эквивалентной ей ручной регистрации.