Comment empêcher élégamment un proxy de service Web d'être exposé à COM?
-
22-07-2019 - |
Question
J'ai un assemblage C # que j'utilise en tant que serveur COM in-proc consommé par une application C ++ non gérée. L'assembly utilise un service Web qui ne changera jamais. Il n'est donc pas nécessaire de mettre à jour les classes de proxy du service Web. C’est pourquoi les classes proxy sont créées une fois et les fichiers Reference.cs
sont simplement placés dans le référentiel et uniquement compilés à partir de celui-ci.
Le problème est que, par défaut, les classes de proxy Webservice sont publiques et sont donc exposées à COM. Cela gonfle le typelib et pollue le registre. Changer la visibilité en interne rompt l’assemblage, de sorte que ces entités doivent rester publiques mais ne doivent pas être exposées à COM.
La méthode idiote consiste à approcher chaque interface / classe publique dans les fichiers Reference.cs
et à la marquer avec
[System.Runtime.InteropServices.ComVisible(false)]
Après cela, il n'est plus exposé à COM.
Y a-t-il un meilleur moyen?
La solution
Vous pourriez
- marque l'assembly pour ne pas être
ComVisible
, puis marque explicitement toutes les interfaces / classes / enums que vous souhaitez exposer àCOM
commeComVisible
. -
utilisez un deuxième fichier et une classe partielle pour marquer vos types de proxy comme
ComVisible (false)
[System.Runtime.InteropServices.ComVisible(false)] partial class YourProxyType {} [System.Runtime.InteropServices.ComVisible(false)] partial class AnotherProxyType {}