Comment puis-je forcer WCF à générer automatiquement des WSDL avec les paramètres de méthode requis (minoccurs = "1")?
Lors de l'utilisation de WCF et OperationContracts j'ai la méthode suivante définis:
[OperationContract]
[FaultContract(typeof(ValidationFault))]
[FaultContract(typeof(FaultException<ExceptionDetail>))]
int DoSomething(int someId, MyComplexType messageData);
Quand cela se traduit à un WSDL par la FMC de l'exécution, il se retrouve avec avec minoccurs="0" répertoriés pour les paramètres someId et messageData (et par la suite déclenche une erreur d'exécution si ces paramètres sont manquants).
Si je générer un proxy à l'aide de SoapUI-je obtenir quelque chose qui ressemble à ceci:
<com:DoSomething>
<!--Optional-->
<com:EventId>1</com:EventId>
<!--Optional-->
<com:myComplexType >
<com:id>1</com:id>
</com:myComplexType >
</com:DoSomething>
Le champ id dans MyComplexType est marqué avec DataMemeber attribut à l'aide de IsRequired="true" et est donc exposée comme obligatoire.
Il est évidemment tout à fait trompeur pour le WSDL pour indiquer qu'un paramètre est facultatif, quand ce n'est pas le cas, mais je ne vois aucun moyen évident de balisage de la OperationContract à la force de la WCF de reconnaître et d'exposer ces paramètres requis.
Je suis un peu perplexe, il ne semble pas d'une manière évidente pour ce faire (lecture intellisense /msdn /google). Ou alors je suis aveugle et donnant sur quelque chose d'évident.
Toute indices?
source d'informationauteur DavidWhitney
Vous devez vous connecter pour publier un commentaire.
Je viens d'écrire un Post de Blog sur ce sujet, comme je l'ai couru dans le problème moi-même la semaine dernière.
Il explique comment vous pouvez modifier les métadonnées de la WCF génère lors de l'exécution.
Côté de télécharger le fichier source, vous avez seulement besoin d'ajouter un attribut à votre définition de contrat. Comme:
Voici le post de Blog qui explique plus en détail: Le contrôle de WSDL minOccurs avec WCF
Vérifier que MyComplexType est marqué avec un [DataContract] attribut.
Pour mon propre WCF contrat, j'ai trouvé que minOccurs = 1 ne serait pas de montrer pour IsRequired=true dans le wsdl généré jusqu'à ce que l'ensemble de la chaîne des objets impliqués dans le contrat ont été marqués comme tels.