Как элегантно предотвратить доступ прокси-сервера к COM-серверу? - PullRequest
2 голосов
/ 30 октября 2009

У меня есть сборка C #, которую я использую в качестве внутрипроцессного COM-сервера, используемого неуправляемым приложением C ++. Сборка использует веб-сервис, который никогда не изменится, поэтому нет необходимости когда-либо обновлять прокси-классы веб-сервиса. Вот почему прокси-классы создаются один раз, а Reference.cs файлы просто помещаются в хранилище и только компилируются оттуда.

Проблема заключается в том, что по умолчанию прокси-классы веб-службы являются общедоступными и, следовательно, доступны для COM. Это раздувает typelib и загрязняет реестр. Изменение видимости для внутреннего разрыва сборки, поэтому эти объекты должны оставаться открытыми, но не должны подвергаться воздействию COM.

Тупой способ - подойти к каждому общедоступному интерфейсу / классу в файлах Reference.cs и пометить его

[System.Runtime.InteropServices.ComVisible(false)]

После этого он больше не подвергается воздействию COM.

Есть ли лучший способ?

1 Ответ

4 голосов
/ 30 октября 2009

Вы могли бы

  • пометьте саму сборку, чтобы она не была ComVisible, а затем явно пометьте все интерфейсы / классы / перечисления, которые вы хотите предоставить COM, как ComVisible.
  • используйте второй файл и частичный класс, чтобы пометить типы прокси как ComVisible(false)

    [System.Runtime.InteropServices.ComVisible(false)]
    partial class YourProxyType {} 
    
    [System.Runtime.InteropServices.ComVisible(false)]
    partial class AnotherProxyType {}
    
...