2010-05-12 13 views
3

Je voulais savoir quelle est l'utilisation de MessageParameterAttribute dans wcf.comment utiliser MessageParameterAttribute dans wcf

Dans ma fonction:

[OperationContract] 
public float GetAirfare(
[MessageParameter(Name=”fromCity”)] string originCity, 
[MessageParameter(Name=”toCity”)] string destinationCity); 

Je n'utiliser fromCity ou toCity partout dans la mise en œuvre ou même lors de l'utilisation d'un service. Alors quel est le point en lui donnant un nom?

Répondre

5

Cet attribut est utilisé pour contrôler la sérialisation. Cela peut être particulièrement utile lorsque vous souhaitez utiliser un mot-clé ou un nom de type dans le schéma XSD résultant qui décrit un message entrant. De même, vous pouvez contrôler le nom de l'élément XML pour la valeur de retour dans un message de réponse. Il peut également être un attribut utile pour standardiser les conventions de dénomination des éléments XML, distinct des conventions de dénomination CLR. Par exemple, vous préférerez peut-être utiliser chameau pour les noms de paramètres et Pascal pour XML.

Si nous devions utiliser votre extrait de code fourni à titre d'exemple, la demande ressemblerait à ceci:

<s:Body> 
    <GetAirFare xmlns="yournamespacehere"> 
     <fromCity>Chicago</fromCity> 
     <toCity>Las Vegas</toCity> 
    </GetAirFare> 
</s:Body> 
+0

Merci. Mais quand spécifierais-tu explicitement XSD comme ça? Pouvez-vous donner un exemple? – Archie

+0

Le fichier XSD est généré automatiquement pour vous, en supposant que vous utilisez l'IDE de Visual Studio. Si vous ou un autre client ajoute une référence de service au service WCF, vous remarquerez que la classe Reference.cs générée automatiquement ressemblera à ceci: public float GetAirfare (chaîne fromCity, chaîne toCity) { return base.Channel. GetAirfare (de la ville, à la ville); Si quelqu'un utilisait un environnement non-.NET pour consommer le service et n'avait pas d'outils pour générer automatiquement des proxys de service comme nous, il pourrait avoir besoin de créer une classe proxy à la main et aurait besoin de XSD et WSDL il. –