DCOM необходимо зарегистрировать сервер как на клиентском, так и на серверном компьютере.

Я написал в Delphi 2010 сервер DCOM и клиент для вызова сервера. Чтобы иметь возможность запускать клиента на машине, отличной от машины сервера, мне нужно зарегистрировать сервер на обеих машинах, помимо выполнения действий, связанных с безопасностью, чтобы позволить клиенту получить доступ к серверу.

Мне интересно, есть ли кто-нибудь, кто знает способ, требующий минимальных усилий для использования клиента и сервера на двух разных машинах, предполагая, что и клиент, и сервер написаны и работают. На данный момент я получил следующее:

  1. запустите server.exe на сервере: server.exe / regserver
  2. запустите DCOMCNFG и установите параметры безопасности на сервере.
  3. определить входящие правила в брандмауэре, чтобы разрешить соединение на сервере.
  4. запустите server.exe на клиентской машине: server.exe / regserver
  5. теперь мы можем запустить client.exe на клиентской машине и использовать интерфейсы, реализованные на сервере.

Что подтолкнуло меня написать этот вопрос, так это то, что я не могу понять, почему нам также нужно регистрировать сервер на клиентской машине. Клиентское приложение знает об идентификаторах GUID интерфейса и сервера и соответственно использует их при создании сервера в своей реализации. Таким образом, DCOM на клиентском компьютере имеет достаточно информации для запроса DCOM серверного компьютера, чтобы предоставить ему правильный сервер с предоставленным GUID, и нам не нужно регистрировать сервер на стороне клиента (по крайней мере, как кажется), но мы нужно на самом деле это сделать.

наилучшие пожелания,


person Zonouzi    schedule 25.07.2016    source источник
comment
Клиент может знать все, что ему нужно знать, но в конечном итоге не клиент устанавливает соединение с другой стороной, это делает COM +. Таким образом, библиотека типов должна быть зарегистрирована на клиентском компьютере, прежде чем промежуточное ПО сможет творить чудеса.   -  person Martin Maat    schedule 26.07.2016
comment
Спасибо за ваш ответ. Но я подумал, что, возможно, мне что-то не хватает в моих настройках, и, как вы сказали, это так по дизайну, и в моем способе настроек нет ничего плохого.   -  person Zonouzi    schedule 26.07.2016


Ответы (1)


На самом деле вам не нужно регистрировать сервер на клиентской машине. Однако вам может потребоваться зарегистрировать библиотеку типов сервера на клиентском компьютере. У вас есть 2 варианта:

  1. Зарегистрируйте библиотеку типов сервера на клиентском компьютере

  2. Создайте приложение DataSnap Server (на основе COM) и используйте DCOMConnection, SocketConnection или SOAPConnection для подключения к нему без регистрации сервера или библиотеки типов на клиентском компьютере.

Я разработал несколько серверов COM / COM + за последние 15 с лишним лет. Моя рекомендация: создайте серверы на базе COM DataSnap и избавьтесь от головной боли при развертывании вашего COM-сервера и клиента. Его намного проще развернуть и поддерживать.

person Alexandre M    schedule 25.07.2016
comment
Спасибо за ваш ответ. Регистрация библиотеки типов - это что-то вроде регистрации самого сервера, в отличие от того, что я ожидал. Но использование DataSnap - это то, о чем я думал. Возможно, DataSnap завершил DCOM в этой перспективе. - person Zonouzi; 26.07.2016
comment
Фактически регистрация библиотеки типов имеет тот же эффект, что и регистрация сервера, но, конечно, не то же самое. При регистрации библиотеки типов мне не нужно развертывать двоичную версию моего сервера, чтобы зарегистрировать его. Мне просто нужно отправить файл TLB с моим клиентским EXE, который может проверить реестр и зарегистрировать сам файл TLB только в случае необходимости (для чего в большинстве случаев потребуется повышение прав). - person Alexandre M; 27.07.2016
comment
Как всегда вы правы, в техническом плане они не совпадают. Но я полагал, что мы действуем, регистрируясь на обеих сторонах или просто регистрируясь на стороне сервера, и позволяя фонду делать все остальное. В предложенном вами способе DataSnap мы просто передаем client.exe клиенту, и мне не нужно больше ничего регистрировать на стороне клиента. Я надеюсь, что на этот раз прояснюсь. На самом деле, возвращаясь к моему вопросу, когда DataSnap может это сделать, почему DCOM не может делать то же самое. Я все равно благодарю вас за помощь. - person Zonouzi; 27.07.2016