¿Cómo evitar elegantemente que un proxy de servicio web quede expuesto a COM?
-
22-07-2019 - |
Pregunta
Tengo un ensamblado C # que uso como servidor COM en proceso consumido por una aplicación C ++ no administrada. El ensamblaje consume un servicio web que nunca cambiará, por lo que no hay necesidad de actualizar las clases proxy del servicio web. Es por eso que las clases proxy se crean una vez y los archivos Reference.cs
simplemente se colocan en el repositorio y solo se compilan desde allí.
El problema es que, de forma predeterminada, las clases proxy del servicio web son públicas y, por lo tanto, están expuestas a COM. Esto infla el registro typelib y contamina. Cambiar la visibilidad para romper internamente el ensamblado, por lo que esas entidades deben permanecer públicas, pero no necesitan estar expuestas a COM.
La forma tonta es acercarse a cada interfaz / clase pública en los archivos Reference.cs
y marcarla con
[System.Runtime.InteropServices.ComVisible(false)]
Después de eso ya no está expuesto a COM.
¿Hay una mejor manera?
Solución
Podrías
- marque el ensamblaje para que no sea
ComVisible
y luego marque explícitamente todas las interfaces / clases / enumeraciones que desea exponer aCOM
comoComVisible
. -
use un segundo archivo y una clase parcial para marcar sus tipos de proxy como
ComVisible(false)
[System.Runtime.InteropServices.ComVisible(false)] partial class YourProxyType {} [System.Runtime.InteropServices.ComVisible(false)] partial class AnotherProxyType {}