2010-12-15 3 views
0

J'ai plusieurs services WCF que j'ai importés dans une bibliothèque de classes .Net4. Lorsque le proxy est créé, plusieurs énumérateurs déclarés comme DataContracts sont importés dans le proxy. Par la suite, j'expose plusieurs procédures via COM Interop à utiliser en tant que bibliothèques ActiveX, et j'utilise les énumérateurs importés comme paramètres de ces procédures.
Dans les procédures de ma bibliothèque de classes, je peux exposer avec [ComVisible(true)], afin qu'ils puissent être appelés via COM. Cependant, les méthodes qui ont recenseurs en tant que paramètres, lorsque je me enregistre avec regasm.exe, je reçois l'erreur:Faire enum importé de WCF comme visible dans COM Interop

Type library exporter warning processing 'xxxxxx.Method(pEnumerator),yyyyyy'. Warning: Non COM visible value type 'yyyyyy.zzzzzzz.enEnumerator' is being referenced either from the type currently being exported or from one of its base types. 

Je sais que cela se produit parce que les agents recenseurs ne sont pas exposés à ComVisible, mais si je mets le nécessaire paramètre, puisqu'ils sont dans le proxy, chaque fois que j'ai rafraîchi le proxy, ils seront écrasés. Y a-t-il de toute façon autour de ça?
Je peux créer mes propres énumérateurs à l'intérieur de la bibliothèque de classes, les exposer avec ComVisible, et faire un switch pour faire correspondre les énumérateurs importés à mes énumérateurs créés. Mais je voudrais éviter cela.
Tks pour l'aide

Répondre

1

Créer une bibliothèque commune partagée entre le client et le service. Ajoutez vos énumérateurs dans cet assembly et marquez-les avec ComVisible.

Lors de la création d'un proxy à partir de VS, une case à cocher (cochée par défaut) permet de réutiliser les types dans les assemblages actuels ou référencés. Avec cette option cochée, le proxy utilisera les types de l'assembly partagé au lieu de générer de nouveaux.

Questions connexes