Toutes les liaisons WCF qui ne commencent pas par net
(netTcp, netMsmq, etc.) devraient fonctionner correctement - elles sont conçues pour être interopérables.
Le plus basique est basicHttpBinding
qui est à peu près simple HTTP - rien de beaucoup ne peut y être ajouté. Vous devriez être capable de l'appeler depuis n'importe quel langage de script (PHP, etc.).
La liaison plus avancé est wsHttpBinding
qui met en oeuvre beaucoup de WS- * normes et peut être appelé à partir d'autres langues où la pile de mise en réseau peut gérer WS- * - des trucs comme Java, etc.
Et puis il y a le webHttpBinding
ce qui expose votre service non via SOAP, mais via un point de terminaison REST. Cela devrait être appelable à partir de n'importe quelle langue, n'importe quel appareil, n'importe quel endroit.
Et bien sûr, vous bénéficiez de la meilleure couverture si vous exposez plusieurs points de terminaison à votre service, en offrant une variété de choix à quiconque tente de vous appeler. Tout cela se fait simplement dans la configuration - aucun changement de code nécessaire pour prendre en charge plusieurs points d'extrémité, plusieurs liaisons etc.
En ce qui concerne les listes et les choses: les échanges WCF messages sérialisés - essentiellement XML - qui est régie par un schéma XML. La combinaison d'un WSDL et d'un XSD est totalement interopérable et peut être comprise par une grande variété d'autres langues.
Un List<T>
dans .NET sera transformé en un tableau dans votre structure XML, et c'est totalement interopérable - ne vous inquiétez pas. Le client pourrait juste récupérer un tableau au lieu d'une liste - mais ce n'est pas un problème. Le seul problème est que vous ne pouvez pas vraiment modéliser une liste générique, puisque le schéma XML ne supporte pas les génériques - vous devez être explicite sur ce que vous renvoyez. Un List<T>
ne fonctionnera pas - un List<Customer>
sera (si votre objet Customer
fait partie de votre contrat de données et marqué comme tel)
Merci :). Comment marquer un objet dans le cadre d'un contrat de données? – Matt
@Matt: place un attribut [DataContract] 'sur la classe, et décore tous les membres qui doivent être sérialisés (inclus dans le message WCF) avec' [DataMember] ' –
Génial, merci. – Matt