2011-08-08 4 views
0

Je souhaite télécharger les spécifications xsd à partir d'un service Web et convertir automatiquement (sérialiser) ces schémas en classes (visual studio - vb.net). Si l'organisation qui est responsable des schémas xsd les modifie de manière à ce que seule ma classe correspondant au xsd doive être modifiée (pas le reste de mon code), je voudrais mettre à jour automatiquement ma classe correspondante xsd. Est-ce possible? Si oui, quelqu'un peut-il me dire comment le faire?Sérialisation automatique

Merci!

J'utilise vs2010. Ce que je veux faire est: appelez un service Web où je peux envoyer un paramètre d'entrée au service qui spécifie le xsd que je veux récupérer (le service est GetShemaDefenition et retourne un objet avec la spécification de schéma dans une propriété de chaîne de l'objet). Je dois lire la chaîne xsd de la propriété string et la convertir en une représentation de classe de cette spécification xsd. Est-il possible de le faire automatiquement? Je l'ai fait manuellement en utilisant xsd.exe. Si l'organisation propriétaire de xsd a modifié la spécification xsd, je dois tester s'il existe une nouvelle spécification, et s'il y a une nouvelle représentation de classe de cette xsd? Est-il possible de faire ce que je veux? Et comment pourrais-je savoir si cela a été un grand changement dans le xsd qui affecte également d'autres parties de mon code, et pas seulement la représentation de classe de la xsd?

Réservoirs beaucoup pour votre réponse! Donc, ce que vous dites, si je vous comprends bien, c'est qu'il n'y a pas une bonne solution pour automatiser cette fonctionnalité, car si le xsd change, il est probable que (dans certains cas) je doive changer mon code manuellement? Donc, je dois choisir, soit dans ma demande ou dans mon service intermédiaire? Mais quel est le but de fournir le xsd dans un service Web? À quoi puis-je utiliser le service Web? Je me demandais juste, peut-être que c'est clair, mais je suis nouveau aux services Web et est désireux d'apprendre plus.

Mise à jour:

Merci! Mais pouvez-vous expliquer un peu plus. Ce que je dois faire est: J'utilise un service Web où l'une des propriétés est une chaîne. La chaîne est un code XML dans un bloc CDATA. L'organisation qui fournit le service Web ne parera pas le xml dans le bloc CDATA mais le transmettra à une autre organisation qui utilisera les données xml. L'organisation qui utilise les données xml spécifie le schéma xsd que je dois suivre pour générer mon xml correct. C'est le schéma xsd que je peux obtenir d'un autre service web. Je ne comprends pas vraiment ce que je peux faire avec ce fichier xsd du service Web. Que puis-je faire avec et pourquoi je veux le télécharger à partir du service Web, quand je ne peux pas l'utiliser automatiquement? Étant donné que je dois effectuer les modifications manuellement lorsque xsd change, je peux facilement télécharger le schéma xsd à partir de la page d'accueil de l'organisation et créer la nouvelle classe avec xsd.exe. Je comprends qu'il y a quelque chose que je ne comprends pas: o), pouvez-vous clarifier les choses?

+0

Le schéma est là pour que vous connaissiez l'interface pour le serveur. C'est comme un contrat entre le fournisseur et le consommateur. Ce contrat (l'interface, et le xsd qui le décrit.) Sont supposés être stables et le fournisseur du service ne devrait pas le changer souvent. Le fournisseur de services professionnel fera l'effort nécessaire pour maintenir l'interface compatible en arrière dans le cas d'un changement. Cela dit, rien ne peut les empêcher de le changer. – Mehran

Répondre

0

Quelle version de Visual Studio utilisez-vous? Normalement, vous pouvez cliquer sur les références du projet et Ajouter un service Web. Dans ce cas Visual Studio crée automatiquement les objets nécessaires pour consommer le service. vous pouvez le mettre à jour en cliquant avec le bouton droit de la souris sur la référence.

Cependant, s'il est très susceptible de changer souvent, une solution consiste à implémenter une classe d'adaptateur. utilisez créer une interface qui fournit la même fonctionnalité et appelle le service Web actuel. Dans votre application, vous utilisez uniquement la classe proxy et non le service Web. Plus tard, lorsque l'interface du service Web change, tout ce que vous avez à faire est de changer les composants internes de cette classe intermédiaire.

Mise à jour:

vous pouvez utiliser this tool pour vous créer un objet modèle dans le code. Ensuite, vous pouvez compile your new object model et l'utiliser dans votre application. Il y a beaucoup de complications dans ce que vous voulez faire et la ligne de fond est; Lorsque le modèle d'objet change, votre code échouera.Il n'y a absolument aucun moyen d'imaginer comment l'interface va changer alors que vous pouvez faire tout cela automatiquement il n'y a rien à faire si le nom d'une fonction change.

Cependant, la réponse à votre situation est l'indirection. Si vous ne pouvez pas garantir la stabilité d'un service externe. Pourquoi ne pas créer un service intermédiaire stable qui appelle le service actuel? De cette façon, à l'avenir, vous n'avez plus besoin de toucher votre application. Tout ce que vous avez à faire est de modifier le service intermédiaire tout en gardant son interface compatible.

+0

Je dois poster un commentaire comme une nouvelle question. – Liss