2016-02-16 1 views
0

Nous prévoyons de mettre à niveau notre service Windows au service WCF, je sais que cela n'a rien à voir avec la question. Il existe des centaines de classes définies dans plusieurs DLL.Comment utiliser les classes existantes en tant que contrat de données dans wcf?

Je suis en train de R & D pour passer les classes existantes objets présentés dans le code ci-dessous sur le service WCF

[ServiceContract] 
public interface IService1 
{ 
    [OperationContract] 
    UserSession LoginUser(User user); 
} 

« UserSession » et des classes « utilisateurs » utilisés dans le code ci-dessus sont des classes normales prédéfinies dans un assemblage . Comme ces classes ne sont pas définies comme 'DataContract', le service ne peut pas les sérialiser.

Je ne pouvais pas me permettre de redéfinir ces classes comme 'DataContract'. Est-il possible d'utiliser des classes existantes en tant que 'DataContract' pour communiquer facilement entre le client et le serveur.

Note - Je suis passé par this, c'est long chemin à suivre pour des centaines de classes.

Merci à l'avance

+0

L'attribut '[DataContract]' est * facultatif * en tant que WCF 3.5. Si vous ne le spécifiez pas, WCF tentera d'utiliser 'DataContractSerializer' par défaut (sauf si vous le modifiez). Qu'avez-vous observé qui vous indique que ce n'est pas sérialisé? Notez que la seule chose qui sera sérialisée est la donnée - les méthodes et les constructeurs ne seront pas sérialisés et ne seront pas connus par le client à moins que les assemblages dans lesquels ils se trouvent soient partagés. C'est par conception pour garder les choses SOA. Pouvez-vous poster un exemple de l'une des classes? – Tim

Répondre

0

J'ai regardé autour des solutions qui vous permettront d'envoyer toute une classe par une DataContract et il ne semble pas exister. Le meilleur conseil que je peux donner est de récupérer les données dans ces classes en utilisant un lecteur et ensuite d'envoyer les données via un DataContract. Mais je suppose que c'est exactement ce que vous ne voulez pas avoir à faire.