Tout en utilisant WCF et OperationContracts je la méthode suivante définie:Comment puis-je forcer WCF à générer automatiquement des WSDL avec les paramètres de méthode requis (minoccurs = "1")?
[OperationContract]
[FaultContract(typeof(ValidationFault))]
[FaultContract(typeof(FaultException<ExceptionDetail>))]
int DoSomething(int someId, MyComplexType messageData);
Lorsque cela se traduit à un WSDL par le moteur d'exécution WCF, il se retrouve avec avec minOccurs = « 0 » figurer sur la liste des paramètres someId et MessageData (et renvoie ensuite une erreur d'exécution si ces paramètres sont manquants).
Si je produis un proxy à l'aide SoapUI je reçois 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 IsRequired = "true "et est donc exposé comme obligatoire. Il est évidemment tout à fait trompeur pour le WSDL de spécifier qu'un paramètre est optionnel quand ce n'est pas le cas, mais je ne vois pas de moyen évident de baliser le OperationContract pour forcer WCF à reconnaître et exposer ces paramètres comme requis. Je suis légèrement déconcerté il ne semble pas un moyen évident de le faire (lecture intellisense/msdn/google). Ou je deviens aveugle et oublie quelque chose d'évident.
Des indices?
J'ai trouvé ce problème Microsoft Connect https://connect.microsoft.com/wcf/feedback/ViewFeedback.aspx ? FeedbackID = 482144 qui implique que cela pourrait ne pas être possible. Qui craint. – DavidWhitney
Avec une réflexion supplémentaire, il semble que les paramètres sont listés comme minoccurs = "0" parce que les types eux-mêmes pourraient être nuls, donc, si quelqu'un a fourni un null, il correspondrait toujours à la méthode sig. Cela n'aide pas pour la génération WSDL et la définition d'un contrat avec une application/organisation appelante. – DavidWhitney
le WSDL généré n'est pas affecté car le type pourrait être nul (types de références vs. types de valeur). Si un type de valeur est omis, la valeur par défaut pour ce type de valeur sera utilisée. Voyez ma réponse ci-dessous cependant. – Thorarin