2010-12-05 5 views
1

Comment puis-je m'assurer que mon service WCF est accessible depuis n'importe quelle autre langue (Java, PHP, quels que soient les usages d'iOS, etc.)?Service WCF à plusieurs points de terminaison

J'ai gardé tout comme httpbinding et je n'ai utilisé aucun des rôles .net/authentification d'adhésion pour les clients. Mais il y a des choses dont je ne suis pas sûr. Comme, puis-je retourner une liste générique qui est lisible par ces autres langues?

Répondre

1

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)

+0

Merci :). Comment marquer un objet dans le cadre d'un contrat de données? – Matt

+0

@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] ' –

+0

Génial, merci. – Matt

1

Vous ne pouvez pas être sûr à 100% si vous n'avez aucun contrôle sur la technologie client utilisée pour consommer vos services. Mais vous pouvez être très confiant si votre service Web (WSDL) se conforme au WS-I basic profile v1.1. Cette norme est très largement soutenue et mature. Vous pouvez utiliser l'excellent outil de test SoapUI pour tester votre WSDL pour la conformité.

Questions connexes