Come evitare che un proxy del servizio Web venga elegantemente esposto a COM?
-
22-07-2019 - |
Domanda
Ho un assembly C # che utilizzo come server COM in-proc consumato da un'applicazione C ++ non gestita. L'assembly consuma un servizio web che non cambierà mai, quindi non è necessario aggiornare mai le classi proxy del servizio web. Ecco perché le classi proxy vengono create una volta e i file Reference.cs
vengono semplicemente inseriti nel repository e compilati solo da lì.
Il problema è che per impostazione predefinita le classi proxy webservice sono pubbliche e sono quindi esposte a COM. Questo gonfia il typelib e inquina il registro. La modifica della visibilità interna interrompe l'assemblaggio, pertanto tali entità devono rimanere pubbliche, ma non devono essere esposte alla COM
Il modo stupido è quello di avvicinarsi a ogni interfaccia / classe pubblica nei file Reference.cs
e contrassegnarlo con
[System.Runtime.InteropServices.ComVisible(false)]
Successivamente non è più esposto a COM.
C'è un modo migliore?
Soluzione
Potresti
- contrassegnare l'assembly stesso in modo che non sia
ComVisible
e quindi contrassegnare esplicitamente tutte le interfacce / classi / enum che si desidera esporre aCOM
comeComVisible
. -
usa un secondo file e una classe parziale per contrassegnare i tuoi tipi di proxy come
ComVisible(false)
[System.Runtime.InteropServices.ComVisible(false)] partial class YourProxyType {} [System.Runtime.InteropServices.ComVisible(false)] partial class AnotherProxyType {}