2010-07-05 6 views
1

J'ai une bibliothèque de classes existante avec toutes les classes pour communiquer avec mon serveur. J'ai créé un service WCF qui sera hébergé sur mon serveur existant dans le cadre de différents domaines d'application. Depuis que j'ai déjà les cours, j'ai pensé qu'il pouvait être exposé sur mon service WCF pour réduire mon temps de développement.Exposer la bibliothèque de classes existante au service WCF

J'ai hébergé avec succès mon service WCF et fonctionne sur mon pc de développement. Le problème est du côté du client qui ajoute mon service Web. Ils ne peuvent utiliser que les classes de base de ma bibliothèque.

Comment puis-je faire en sorte que toutes mes classes soient mises à part la classe de base de ma bibliothèque pour qu'elles soient disponibles sur mon service Web? par exemple. des classes auxiliaires, des classes enfants héritées de ma classe de base et d'autres classes utilisées dans ma collection générique.

Toutes mes classes sont habillées avec les attributs Serializable et DataContract. Par ailleurs, ma bibliothèque de classes a été créée il y a 3 ans. J'ai juste patché de nouveaux attributs pour la rendre disponible sur mon service web.

Répondre

1

Les classes auxiliaires qui ne font pas partie de la hiérarchie des classes faisant partie des contrats d'opération ne seront jamais exposées. En ce qui concerne les classes d'enfants, vous pouvez utiliser la section <knownType> dans web.config pour demander au sérialiseur quelles sont les classes d'enfants possibles pour un type de base donnée:

<system.runtime.serialization> 
    <dataContractSerializer> 
     <declaredTypes> 
     <add type="SomeNs.MyBaseType, SomeNs"> 
      <knownType type="SomeNs.MyChildType1, SomeNs"/> 
      <knownType type="SomeNs.MyChildType2, SomeNs"/> 
     </add> 
     <add type="SomeNs.MyBaseType2, SomeNs"> 
      <knownType type="SomeNs.MyChildType3, SomeNs"/> 
     </add> 
     </declaredTypes> 
    </dataContractSerializer> 
</system.runtime.serialization> 

WCF se penchera sur les types qui font partie des contrats d'exploitation (les méthodes marquées avec [OperationContract]) et il exposera automatiquement ces classes dans les métadonnées (WSDL) afin que les clients les verront. Les classes enfants possibles doivent être spécifiées explicitement. Vous pouvez également trouver ce blog post utile.

+0

J'auto-héberge mon service wcf. Quelle partie de App.Config dois-je mettre system.runtime.serialization? – powerbox

+0

Directement à la racine: ' ...' –

+0

Je vais tester vos suggestions. Merci! Si cela fonctionne, j'ai besoin d'ajouter beaucoup de classes sur mon App.Config. – powerbox

Questions connexes