2009-11-10 4 views
0

Je me demande s'il est possible que WCF s'assure que les DataContracts des deux côtés d'une connexion sont exactement les mêmes (et lancent une exception en essayant de se connecter s'ils ne sont pas).WCF: Appliquer des DataContracts égaux des deux côtés

Par exemple, imaginez ce service:

[DataContract] 
enum State 
{ 
    [EnumMember] 
    Red, 
    [EnumMember] 
    Yellow, 
    [EnumMember] 
    Green 
} 

[ServiceContract] 
interface MyService 
{ 
    [OperationContract] 
    void SetState(State newState); 
} 

Maintenant, imaginez le service est mis à jour et prend désormais en charge un nouvel Etat, "Orange". Le client a toujours le DataContract comme indiqué ci-dessus.

Maintenant, je veux que chaque appel du client au service échoue parce que le client et le service n'utilisent pas le même DataContract. Est-ce possible?

Merci d'avance pour toute aide!

+0

J'ai bien peur que ce ne soit pas possible. –

+0

C'est dommage. Merci pour votre réponse. On dirait que je vais devoir trouver une solution de contournement laide dans ce cas pour assurer la compatibilité. – Jan

Répondre

2

Eh bien, vous ne pouvez pas vraiment faire grand-chose sur - mais vous pouvez la version de votre contrat de données avec XML namespaces - quelque chose comme ceci:

[DataContract(Namespace="http://data.yourcompany.com/DataSchema/2009/11")] 
enum State 
{ 
    [EnumMember] 
    Red, 
    [EnumMember] 
    Yellow, 
    [EnumMember] 
    Green 
} 

Votre client va maintenant utiliser ce contrat de données - avec le Espace de noms XML.

Si vous changez votre contrat de données sur le serveur le mois prochain, vous pouvez modifier l'espace de noms XML:

[DataContract(Namespace="http://data.yourcompany.com/DataSchema/2009/12")] 
enum State 
{ 
.... 
} 

Si vous prenez votre retraite tous les points de terminaison de service qui ont utilisé les données «/2009/11 » contrat et seulement avoir de nouveaux points de terminaison avec le nouveau contrat de données, les clients ne pourront plus appeler correctement vos méthodes de service (puisque les espaces de noms XML des deux DataContracts ne correspondent pas).

Peut-être que ce serait une façon de faire?

Marc

+0

Cela semble être une bonne solution, merci! – Jan