2009-12-08 4 views
0

J'ai une classe avec une propriété:WCF propriété interne

[DataMember] 
public bool MyProp { get; internal set;} 

Je remarque que lorsque le proxy est généré. La propriété est encore réglable même si je l'ai marqué interne (je pensais que ce ne sera pas généré du tout).

Existe-t-il un moyen de réaliser ce que j'essaie? Je voudrais être en mesure de définir la propriété du côté du service. Mais ne laissez pas le côté client être en mesure de définir la propriété.

Répondre

0

a [DataMember] sur un contrat de WCF est juste un champ de données sur un contrat de données -.. un schéma XML le setter .NET et le modificateur de visibilité getter sont pas pertinent dans le cas de messages WCF, vraimentSi votre champ a un attribut [DataMember], il fera partie du schéma XML de votre contrat de données - et le client ne peut pas savoir qu'il a un setter "interne" côté serveur - c'est juste une partie des données XSD Contrat.

.NET et WCF sont deux mondes très distincts et séparés - lorsque votre client appelle un service WCF, c'est un message SOAP passant seulement - il n'y a pas interaction .NET objet à partir! Vous n'atteignez pas de votre client vers le serveur pour appeler une méthode sur un objet côté serveur - auquel cas un spécificateur de visibilité .NET pourrait entrer en jeu. Votre client crée un message et l'envoie au serveur, qui réassemble alors l'objet (côté serveur) de ce message. Heck, il y a même un transport basé sur SMTP (e-mail!) Pour WCF! Les deux parties ne partagent que des contrats: contrats de service/d'opération pour vos méthodes de service et contrats de données basés sur des schémas XML pour la transmission de vos données. Il n'y a pas de concept de spécifications de visibilité basées sur .NET dans le schéma XML.

0

Comme pour les contrats de service, les modificateurs d'accès sur DataContracts/DataMembers ne jouent aucun rôle et sont essentiellement dénuée de sens :(

0

Sans get et set, vous ne pouvez pas sérialisation et la désérialisation sur un saut WCF.

vous pouvez mettre en œuvre ce que vous essayez de faire dans la logique de votre service

Questions connexes