7
votes

Comment pouvez-vous forcer la WCF à utiliser XS: tous au lieu de XS: séquence de sorte que la commande d'élément de savon soit hors de propos?

Comment créer WCF Utilisez XS: tous au lieu de XS: séquence lorsqu'il définit des types d'objet complexes dans le WSDL / XSD pour un service Web?

Le problème que j'aurai est que XS: la séquence nécessite que les applications d'appelage transmettent les éléments du message SOAP dans l'ordre spécifié dans XSD généré par WCF (ceci est alphabétique par défaut). XS: tout (ou le choix de cette affaire) ne se soucie pas de la commande.

Ce comportement peut-il être modifié simplement via une option de configuration quelque part?


2 commentaires

Vous pouvez écrire votre propre extension pour créer le WSDL si vous voulez vraiment - ce n'est pas totalement trivial, mais cela peut être fait. Recherchez sur le Web pour "WCF WSDL Extension" - il devrait y avoir plusieurs échantillons là-bas


Est-ce que cela répond à votre question? Validation XML avec XSD : Comment éviter de se soucier de la séquence des éléments?


3 Réponses :


3
votes

du haut de ma tête, je pense que vous ne pouvez pas. Ce que vous pouvez faire à la place, c'est écrire le fichier WSDL à la main, puis utiliser svcoktil.exe pour générer le code.

Si tout ce que vous voulez faire, c'est des éléments de commande dans une commande différente de celle par ordre alphabétique, vous pouvez commander les éléments dans le Datacontract, à l'aide de la commande (à partir de 1, pas 0 de matrices similaires) sur l'attribut [Datamember] ([ Datamember (commande = 1)], [Datamember (commande = 2)], etc.).


3 commentaires

+1 Vous avez cloué sur la tête - il n'y a aucun moyen de sortir de la boîte pour instruire WCF d'utiliser XS: tous au lieu de XS: séquence


Pour une fois que j'ai le temps de répondre à une question de la WCF plus rapidement que vous ne le faites :)


Merci, je pensais que cela aurait pu être le cas.



2
votes

Vous pouvez changer de wcf pour utiliser le XMLSerializer au lieu de DatacontractSerializer. Le XMLSerializer prend en charge XS: tous. Voir http://msdn.microsoft.com/en-us/library/ms733901 .aspx


0 commentaires

0
votes

Même si vous pouviez forcer la WCF à le faire, le désérialiseur ne fonctionnerait pas correctement pour soutenir l'entrée. Exemples et explications ci-dessous.

entrée 1 (bon): p> xxx pré>

entrée 2 (mauvais): p>

<MyOperation>
  <bogusField>with or without data</bogusField>
  <AField>value A</AField>
  <bogusField2 />
  <BField>value B</BField>
  <bogusField3></bogusField3>
</MyOperation>


0 commentaires