2008-12-30 9 views
1

Les jours de remoting .Net me manquent lorsque je peux simplement envoyer un objet sur le câble et que cela fonctionne des deux côtés de la couche intermédiaire sans beaucoup de travail. Voici pourquoi:Conversion d'objets WCF en série en objets natifs

J'ai reçu une affectation. Je construis une couche Logic/Data Abstraction (stupide PCI Compliance) afin que nous puissions déplacer nos serveurs de bases de données hors du réseau d'entreprise vers un réseau protégé. J'ai fait un projet comme celui-ci une fois sous. Net 2.0 avec l'accès à distance. J'ai construit l'objet sur la couche middleware et envoyé cet objet au client et le client a eu mon objet .Net pour travailler avec. Mais la WCF a besoin de la sérialisation pour pouvoir envoyer des choses de haut en bas et la sérialisation enlève à mes méthodes fantaisistes qui font des choses incroyables avec les champs que j'ai en place. J'ai proposé deux stratégies différentes pour contourner ce problème: (1) Déplacer les méthodes de la classe elle-même vers une classe utilitaire statique et (2) "Désérialiser" les données du côté client et reconstruire le natif objet avec des données de l'objet sérialisé.

nativeObject.Name = serializedObject.Name; 

La faille de la deuxième méthode est que je dois re-sérialiser l'objet avant que je puisse le renvoyer à la couche middleware.

serializedObject.Name = nativeObject.Name; 

Les deux méthodes fonctionnent, mais il fait des objets d'écriture prennent beaucoup plus longtemps que prévu à cause de tout ce gâchis de sérialisation que la couche intermédiaire est à l'origine. Je voudrais revenir à .Net Remoting, mais l'architecte dit qu'il veut que cette couche d'abstraction soit faite en WCF parce que (mes mots, pas les siens) c'est nouveau et sexy.

Alors, comment travailler avec des objets natifs .Net des deux côtés d'une connexion WCF ... sans écrire 1000 lignes de code de colle.

Répondre

1

Vous pouvez générer un proxy et lui indiquer d'utiliser un ensemble spécifique de classes au lieu d'en créer de nouvelles. Je crois que cela est fait en utilisant le paramètre/r de svutil.exe. Si vous utilisez l'EDI (VS2008), vous pouvez le faire lorsque vous ajoutez une référence de service, cliquez sur Avancé, et assurez-vous que Réutiliser les types dans les assemblages est sélectionné (ce qui, selon moi, est la valeur par défaut).

+0

Donc, il s'avère que la faille de mon design était que j'ai oublié d'inclure l'assemblage Models dans le projet ServiceReference. Je ne sais pas si je suis un idiot ou si tu es un génie. Donc, je peux me sentir mieux dans ma peau. Je vote pour vous comme un génie. – thaBadDawg

+0

heh heureux d'aider, c'est toujours les choses simples qui nous causent le plus de frustration ... – JoshBerke