Как элегантно предотвратить доступ прокси-сервера веб-сервиса к COM?
-
22-07-2019 - |
Вопрос
У меня есть сборка на C #, которую я использую в качестве встроенного COM-сервера, используемого неуправляемым приложением на C ++.Сборка использует веб-сервис, который никогда не изменится, поэтому нет необходимости когда-либо обновлять прокси-классы веб-сервиса.Вот почему прокси-классы создаются один раз и Reference.cs
файлы просто помещаются в репозиторий и только оттуда компилируются.
Проблема в том, что по умолчанию прокси-классы webservice являются общедоступными и поэтому доступны для COM.Это увеличивает typelib и загрязняет реестр.Изменение видимости на внутреннюю прерывает сборку, поэтому эти объекты должны оставаться общедоступными, но не должны быть доступны COM.
Самый глупый способ - обратиться к каждому общедоступному интерфейсу / классу в Reference.cs
файлы и пометьте их символом
[System.Runtime.InteropServices.ComVisible(false)]
После этого он больше не подвергается воздействию COM.
Есть ли способ получше?
Решение
Ты мог бы
- отметьте саму сборку, чтобы она не была
ComVisible
а затем явно отметьте все интерфейсы / классы / перечисления, которые вы хотите предоставитьCOM
какComVisible
. используйте 2-й файл и частичный класс, чтобы пометить типы ваших прокси как
ComVisible(false)
[System.Runtime.InteropServices.ComVisible(false)] partial class YourProxyType {} [System.Runtime.InteropServices.ComVisible(false)] partial class AnotherProxyType {}