Como evitar elegantemente um proxy do serviço web de serem expostos a COM?
-
22-07-2019 - |
Pergunta
Eu tenho um C # montagem que eu uso como um servidor COM in-proc consumida por um aplicativo não gerenciado C ++. O consome montagem de um webservice que nunca vai mudar isso não há necessidade de sempre atualizar as classes de proxy webservice. É por isso que as classes de proxy são criados uma vez e arquivos Reference.cs
são simplesmente colocadas no repositório e só compilado a partir de lá.
O problema é que, por padrão as classes de proxy webservice são públicos e, portanto, estão expostos a COM. Isto faz a insuflação do registo Typelib e polui. Alterar visibilidade a ruptura interna do conjunto, então essas entidades precisam permanecer público, mas não precisa ser exposto a COM.
A forma muda é aproximar cada interface / classe pública nos arquivos Reference.cs
e marcá-lo com
[System.Runtime.InteropServices.ComVisible(false)]
Depois que já não está exposta a COM.
Existe uma maneira melhor?
Solução
Você poderia
- marcar a montagem em si a não ser
ComVisible
e, em seguida, marcar explicitamente todas as interfaces / classes / enums você deseja expor paraCOM
comoComVisible
. -
usar um segundo arquivo e classe parcial para marcar seus tipos de proxy para ser
ComVisible(false)
[System.Runtime.InteropServices.ComVisible(false)] partial class YourProxyType {} [System.Runtime.InteropServices.ComVisible(false)] partial class AnotherProxyType {}