2010-02-25 6 views
15

J'ai une question concernant les différentes façons dont l'héritage est représenté entre WCF et SUDS (Python). J'ai un serveur C++/CLI WCF (.NET 3.5 SP1) et j'essaye de communiquer avec lui. J'ai utilisé un client C# (WCF également) et cela fonctionne bien, mais il y a des problèmes lors de l'utilisation d'un client SUDS (Python 2.6.4, SUDS 0.3.8). C'est plutôt bien, mais pour les types hérités, et la différence semble être dans la façon dont les deux représentent l'héritage dans le XML SOAP. Quand je regarde les messages que les journaux de serveur, j'obtenir des résultats similaires à ce qui suit:Différences XML entre WCF et Python SUDS pour l'héritage?

C# Client:

<ns:DerivedType> 
... 
</ns:DerivedType> 

Python Client:

<ns:BaseType xsi:type="ns:DerivedType"> 
... 
</ns:BaseType> 

Est-il possible de changer la WCF serveur pour accepter le style Python? Ou pour changer le client Python SUDS pour envoyer le style WCF? Laquelle est correcte?

+1

Pouvez-vous poster plus d'un exemple de code? – Daenyth

+0

+1 sur ce sujet. Nous avons également eu des problèmes d'intégration avec les serveurs SOAP développés dans .net. – Eduardo

Répondre

1

Je ne connais pas le côté python mais il y a quelques options du côté WCF. L'option la plus directe est de créer un message inspector pour détecter et convertir le savon généré par python en quelque chose de plus acceptable pour le service WCF. L'option la plus difficile mais la plus «pure» consiste à déterminer comment façonner le WSDL généré par le service WCF, de manière à permettre au client python de produire le savon appétant mentionné ci-dessus. Une fois que vous avez trouvé les réglages requis, vous utiliserez the MessageContract classes à la place de DataContract pour que le service produise le WSDL modifié. Les clients .NET doivent gérer ce fichier WSDL modifié sans se plaindre.