WCF Versionierungs Enums

8

Ich fange an, einige WCF-Datenverträge zu schreiben, die vorwärtskompatibel sein müssen & amp; versionierbar. Ich habe den MSDN-Artikel hier gelesen und habe mich gefragt, ob jemand eine Klärung zu Punkt # hat. 14 bezüglich enums. Es lautet wie folgt:

  

14. Sie sollten keine Enumerationselemente zwischen Versionen hinzufügen oder entfernen. Sie sollten Enumerationselemente auch nicht umbenennen, es sei denn, Sie verwenden die Name-Eigenschaft für das EnumMemberAttribute-Attribut, um ihre Namen im Datenvertragsmodell beizubehalten.

Wenn ich dies lese, bedeutet das, dass sobald Sie eine Enumeration veröffentlicht haben (und von Clients verwendet werden), Sie sie nicht ändern können (hauptsächlich hinzufügen / entfernen), ohne die Kompatibilität zu beeinträchtigen? (d. h. dies wäre eine brechende Änderung)

Kann jemand das bestätigen?

    
Gareth 13.01.2011, 07:52
quelle

2 Antworten

8

Ich kann bestätigen, dass Sie zu einer veröffentlichten Enumeration HINZUFÜGEN können, ohne die Kompatibilität zu beeinträchtigen, solange Sie den neuen Wert nicht verwenden, wenn Sie mit dem Dienst sprechen. Beachten Sie jedoch, dass Sie eine System.ServiceModel.CommunicationException erhalten, wenn Sie tatsächlich versuchen, eine Klasse an den Dienst zu senden, der den neuen Enum-Wert verwendet.

%Vor%     
Ryan Sorensen 18.02.2011, 22:07
quelle
6

Ich würde nicht empfehlen, Enums über WCF-Schnittstellen zu senden. Angenommen, Sie haben folgende Aufzählung:

%Vor%

Wenn Sie das Enum über WCF zurückgeben, wird alles gut funktionieren:

%Vor%

Fügen Sie der Enumeration hinzu, ohne die Service-Referenz im Client zu aktualisieren, und es geht Ihnen immer noch gut:

%Vor%

Wenn Sie jedoch den Mehrwert aus dem Service zurückgeben, ohne die Client-Service-Referenzen zu aktualisieren, wird die alten Clients unterbrochen :

%Vor%

Ich hatte Probleme in Projekten, in denen die Unterstützung von Legacy-Clients wichtig ist. Die Lösung bestand darin, einfach DTOs über den WCF anstatt über Enums zu senden. Z.B. Das WeekdayEnum könnte ersetzt werden, indem die Werte über ein einfaches DTO gesendet werden:

%Vor%

Auf diese Weise bleiben Ihre alten Kunden glücklich.

    
Lauri Harpf 12.11.2012 13:56
quelle

Tags und Links