Contrats WCF portables / interopérables
-
20-08-2019 - |
Question
Je me demandais si quelqu'un avait quelques bons conseils à faire pour concevoir des contrats WCF avec un souci d'interopérabilité des services Web, à la fois en termes de technologies de services Web Microsoft plus anciennes (par exemple, WSE) et non Microsoft. technologies telles que l'appel Java de services Web WCF.
Par exemple: existe-t-il des règles spéciales à prendre en compte lors de l’exposition de DateTime en tant que type dans votre contrat? Qu'en est-il des dictionnaires et des tables de hachage? Quels sont les problèmes que vous pourriez rencontrer avec les différentes liaisons disponibles?
La solution
Problèmes WCF DateTime
En ce qui concerne votre question DateTime, vous avez raison de ne pas vouloir transmettre DateTime via WCF. Ce n’est qu’un maillon parmi tant d’autres qui se plaignent des difficultés… http://daveonsoftware.blogspot.com/2008/07/wcf -datetime-field -justed.html
En ce qui concerne l'équivalence de type
Selon la section 3.1.3 du livre de Juval Lowy intitulé Programming WCF Services, 2nd Edition ...
WCF propose des contrats de données implicites pour les types primitifs parce qu'il y a un standard de l'industrie pour les schémas de ces types.
Il souligne également l'utilisation de types personnalisés en tant que paramètres dans les méthodes de contrat d'opération. Je suppose que cela s'applique également aux types de retour de méthode.
Pour pouvoir utiliser un type personnalisé en tant que paramètre de fonctionnement, il y a deux exigences: premièrement, le type doit être sérialisable, et en second lieu, les deux client et le service doivent avoir un définition locale de ce type entraîne le même schéma de données.
Vous pouvez également consulter la section F.4. Data Contracts, qui fait partie de sa norme de codage WCF. La puce n ° 9 s'applique à votre question ...
Ne transmettez pas les types spécifiques à .NET, tels que en tant que Type, en tant que paramètres d'opération.
Liaisons définissant les attentes
Les liaisons basées sur WSHttpBindingBase (recherche dans Reflector.NET pour ses quatre dérivations) vont être les plus interopérables, car elles sont conçues pour l’interopérabilité.
Recommandation du livre
Je recommande vivement le livre de Juval: http://www.bookpool.com/sm/0596521308
Autres conseils
Donc, si vous souhaitez interagir avec des services non Microsoft, vous voudrez probablement éviter tout type non primitif. WCF utilise la sérialisation pour encoder les données à transmettre et Java par exemple ne pourra pas désérialiser une table de hachage. Toutefois, WCF étant construit sur SOAP, vous devriez pouvoir utiliser n'importe quelle fonctionnalité SOAP entre un client JAVA et le service WCF, ou inversement.
N'oubliez pas de composer des contrats de primitives et vous devriez vous en sortir.