none
DCOM на другом компьютере. ПОмогите подключиться из приложения C# RRS feed

  • Общие обсуждения

  • Прочитал кучу информации по DCOM, но все равно остались вопросы, без ответа на которые я не пойму почему у меня не работает приложение.

    итак есть компьютер на нем запущен сервер для обработки входящих телефонных вызовов
    в  хелпе от разработчика ПО есть следующее: "

    Библиотека SpRecord предназначена для получения
    разрабатываемыми Вами приложениями информации о ходе записи в режиме реального
    времени и управления работой каналов записи.

    Библиотекой реализовано два COM-интерфейса: ISpRecordClientW для получения информации об
    адаптерах и получения информации о ходе записи всех каналов, с которыми ведет
    работу программа, и ISpRecordChannelClientW для работы и
    управления отдельно выбранным каналом. ... "
    и т.д.
    произвел согласно хелпа на сервере настройку DCO:
    1. Добавил исключения в брандмауэр
    2. добавил в безопасность DCOM доменного пользователя назначил ему права удаленного подключния, разрешил ему запуск и активацию.
    3. создал локального пользователя, от имени которго будут запускаться компоненты (так требовал хелп), дал пользователю доступ на папку где установлены компоненты
    4. в
    Службы компонентов/Компьютеры/Мой компьютер/Настройка DCOM и в свойствах так же добавил разрешения на доменного пользователя, во вкладке "удостоверения" указал локального пользователя от имени которого будет запускаться компонента.

    как я понял из всего что нашел в интернете этого достаточно чтобы можно было подключаться.
    далее в своем проекте я пытаюсь выполнить подключение:

     Type type = Type.GetTypeFromProgID(textBox1.Text,textBox2.Text );
    
    где textbox1.Text - название компоненты в том виде как я видел ее название в dcomcnfg
    
    textbox2 - имя компьютера в сети, на котором запущен сервер.
    
    

    в результате трассировки type у меня null. т.е. как я понимаю никакого подключения не происходит.

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

    18 декабря 2013 г. 10:00

Все ответы

  • ProgID - это не имя компонента, а строка вида "модуль.компонент.версия". В таком виде компонент должен быть зарегистрирован в реестре сервера.
    18 декабря 2013 г. 10:17
  • ага, нашел в реестре ProgID данной компоненты: "spsdksw.SpRecordClientW" 
    однако не помогло, все равно null

    [HKEY_CLASSES_ROOT\CLSID\{C50AD25C-1BDA-4CF3-ADAB-3C268EE9B645}]
    @="SpRecordClientW Object"
    "AppID"="{C50AD25C-1BDA-4CF3-ADAB-3C268EE9B645}"
    [HKEY_CLASSES_ROOT\CLSID\{C50AD25C-1BDA-4CF3-ADAB-3C268EE9B645}\ProgID]
    @="spsdksw.SpRecordClientW"
    [HKEY_CLASSES_ROOT\CLSID\{C50AD25C-1BDA-4CF3-ADAB-3C268EE9B645}\TypeLib]
    @="{AEF7E99C-D468-4E0B-B356-F072D784AB05}"
    [HKEY_CLASSES_ROOT\CLSID\{C50AD25C-1BDA-4CF3-ADAB-3C268EE9B645}\Version]
    @="2.2"

    запустил свой проект на компьютере где установлен сервер, там type получил значение!

    т.е. делаю вывод, что не все настроил...

    вопрос: настройки DCOM должны делаться только на сервере? или еще что-то нужно на клиенте?

    • Изменено anknown123455 18 декабря 2013 г. 10:56
    18 декабря 2013 г. 10:35
  • Сам DCOM не использовал, но знаю про такую вещь как proxy. Если коротко, это некий представитель удаленного компонента на локальной машине. Он берет на себя вызовы методов удалённого компонента (передачу параметров и возврат результатов). Вероятно, он должен быть как-то зарегистрирован локально.
    18 декабря 2013 г. 12:18
  • Попробуйте зарегистрировать компонент локально. Может быть он тогда и будет работать в качестве proxy?
    18 декабря 2013 г. 12:41