2010-02-25 10 views
15

Ho una domanda riguardante i diversi modi in cui l'ereditarietà viene rappresentata tra WCF e SUDS (Python). Ho un server WCF C++/CLI (.NET 3.5 SP1) e sto cercando di comunicare con esso. Ho usato un client C# (WCF anche) e funziona bene, ma ci sono problemi quando si usa un client SUDS (Python 2.6.4, SUDS 0.3.8). È per lo più soddisfacente, ma per tipi ereditati, e la differenza sembra essere nel modo in cui i due rappresentano l'ereditarietà nell'XAP SOAP. Quando guardo i messaggi che i log del server, ottengo risultati simili a quanto segue:Differenze XML tra WCF e Python SUDS per ereditarietà?

C# Cliente:

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

Python Cliente:

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

E 'possibile cambiare il WCF server per accettare lo stile Python? O cambiare il client Python SUDS per inviare lo stile WCF? Quale è corretto?

+1

Puoi pubblicare più di un esempio di codice? – Daenyth

+0

+1 questo argomento. Abbiamo avuto problemi con l'integrazione con i server SOAP sviluppati in .net. – Eduardo

risposta

1

Non so il lato del pitone ma ci sono un paio di opzioni sul lato WCF. L'opzione più dritta è quella di creare un valore message inspector per rilevare e convertire il sapone generato da python in qualcosa di più appetibile al servizio WCF.

L'opzione più difficile ma "più pura" è determinare come modellare il WSDL generato dal servizio WCF in modo che consenta al client python di produrre il sapone palatable di cui sopra. Una volta individuate le modifiche necessarie, si utilizzerà the MessageContract classes al posto di DataContract per fare in modo che il servizio produca il WSDL ottimizzato. I client .NET devono gestire questo WSDL ottimizzato senza lamentarsi.