2009-09-17 7 views
0

J'ai un service Web conçu pour accepter les données de performance via un objet personnalisé. L'objet personnalisé contient une collection (liste générique) de mesures de performance parmi d'autres données. La mesure de performance consiste en des types de données simples (chaînes, entiers et un datetime). La seule méthode exposée par le service Web nécessite la transmission de cet objet personnalisé (objet de données de performance).Consommation d'objets personnalisés entre les services Web

Le problème réside dans l'utilisation externe de cet objet personnalisé. Je souhaite utiliser les méthodes Add() et Item() de la classe Generic List avec diverses autres fonctionnalités de cette classe dans un autre service Web. Si je demande l'objet à partir du Webservice Performance Data, il séralise la collection interne en une liste de tableaux. Je voudrais qu'il reste une collection générique. J'ai essayé d'utiliser la méthode XmlInclude, mais je n'ai pas trouvé de solution pour le moment. La chose suivante que j'ai essayé de faire était de créer un ensemble de cet objet spécifique que le service Web de données de performance peut utiliser et tous les programmes satellites (c'est-à-dire un autre service web). Le problème ici est que lorsque j'essaie de transmettre l'objet personnalisé créé par l'assembly séparé, le service Web de données de performances abaisse son type différent. (J'applique également l'attribut XmlInclude (GetType (assembly personnalisé)) à la méthode exposée). Cependant, pense toujours que les types ne sont pas convertibles.

Remarque: Je préférerais appeler Performance Data WS pour obtenir l'objet personnalisé au lieu d'avoir à traiter de l'ajout d'assemblys à chaque projet ayant besoin d'un accès.

Quelqu'un at-il une idée autre que de restructurer le programme pour qu'il fonctionne avec les méthodes exposées par ArrayList?

+0

Les services Web ne sont pas destinés à transmettre des objets personnalisés, en fait, ils seront sérialisés aux types standard XML. – shivaspk

+0

J'ai posté la solution ci-dessous. –

Répondre

0

Si vous utilisez WCF, vous pouvez configurer le type de collection qui sort, qu'il s'agisse d'une liste de tableaux, d'un tableau fixe ou d'une liste générique.

+0

J'utilise .Net 2.0 malheureusement. –

+0

Vous devriez arrêter de faire ça. Il n'y a pas de bonne raison pour ça. Au moins mettre à jour vers .NET 2.0 SP2. –

+0

J'utilise 2.0 SP2. WCF est une fondation 3.x. –

0

J'ai trouvé une solution qui fonctionnera avec .Net 2.0. En utilisant Web Services Contract First (WSCF http://www.thinktecture.com/resourcearchive/tools-and-software/wscf/wscf-walkthrough) J'ai été en mesure de transmettre des collections génériques entre deux services. Un inconvénient de la FUACE, comme son nom l'indique, est que l'approche nécessite l'utilisation d'un contrat en premier lieu au lieu de la méthode plus courante du code en premier. Heureusement, il n'est pas très compliqué de modifier la classe et le proxy après leur création. Espérons que cela aidera tous les voyageurs perdus ...

+0

Il n'est pas recommandé de modifier le code généré, car vos modifications seront perdues dès que le code sera à nouveau généré. –

+0

Je suis d'accord que ce n'est pas une bonne pratique. Une fois le code généré la première fois, je n'utilise plus le générateur automatique. Je modifie simplement la classe proxy comme je le ferais pour n'importe quelle autre classe. Le codage est le même à l'exception des balises XML appliquées aux méthodes. S'il vous plaît fournir une meilleure idée si vous en avez un. –

Questions connexes