2009-11-05 5 views
0

J'ai exposé une méthode sur un service Web pour retourner une interface et renvoyer les classes conrete en utilisant l'attribut [ServiceKnownType] qui fonctionne très bien.Faire une structure d'interface apparaît dans un WSDL

Cependant, la description wsdl n'affiche aucune de ses propriétés ni aucune structure xml pour cette interface, c'est la même chose quand je renvoie List, cela lui donne un type par défaut de 'ArrayOfAny'. Ce que je voudrais faire est de remplacer cette structure XML 'ArrayOfAny' dans le WSDL par la structure du type de service connu.

Je sais qu'il existe une interface 'IWsdlExportExtension' qui peut être implémentée pour avoir accès à la création de wsdl et ceci étant fait, je n'ai aucune idée de ce qu'il faut faire ensuite?

Quel processus aurais-je effectuer pour faire le « message de sortie » WSDL noeud XML ont la structure XML de la classe conrete que j'envoie effectivement de retour?

Donc, fondamentalement, je veux juste modifier le nœud xml wsdl input_message avec un contenu personnalisé?

Des idées?

Répondre

2

Vous ne pouvez pas faire cela. Le monde orienté service et avec WCF est construit sur le schéma XML, et vous pouvez seulement envoyer des types concrets à travers le fil. Rappelez-vous - tout ce qui se passe entre le client et le serveur est un message sérialisé - il n'y a pas de passage de références ou quoi que ce soit - et seules les classes concrètes peuvent être sérialisées dans un message. Ce que vous pouvez faire (jusqu'à un certain point) est de définir une classe de base, puis d'utiliser l'attribut [KnownType] pour déclarer que d'autres descendants peuvent également être reçus et/ou renvoyés par une opération donnée. Votre seul espoir serait le NetDataContractSerializer, que vous pourriez utiliser, si vous contrôlez les deux extrémités du canal de communication (par exemple .NET-to-.NET WCF).

Découvrez ces articles à ce sujet:

les packs NetDataContractSerializer informations de type .NET dans votre message sérialisé, permettant ainsi des scénarios délirants que régulièrement, interopérable l'implémentation du service ne peut pas gérer.

MISE À JOUR: - ok, je n'ai probablement pas compris l'essentiel de votre question - cet article A Sample IWsdlExportExtension for WCF vous aide-t-il peut-être?

+0

Je ne veux pas définir l'interface mais une classe concrète mais toujours garder l'interface que le type de retour de la méthode de flexibilité. Donc, si je peux dynamicall injecter la structure de la classe knowntype la méthode sera toujours assez dynamique – Jon

+0

Je pense que vous avez manquer compris un peu, je n'ai aucun problème avec la partie interface, je veux juste modifier le wsdl input_message noeud xml avec du contenu personnalisé? – Jon

+0

Je sais qu'il ya quelques choses que vous pouvez faire avec un exportateur WSDL personnalisé, mais je ne l'ai jamais vu quelque chose comme ce que vous cherchez ... –