Ich habe einen WCF-Dienst, in dem ich einige Datenverträge habe. Ich benutze Web-Service-Software Factory, die einen Designer verwendet, um alle Nachrichten und Daten und andere Verträge zu erstellen, und es erstellt sie als Teilklassen. Wenn der Code neu generiert wird, werden die Klassen neu erstellt.C# WCF Datenvertrag Teilklasse - neues Feld in 2. Teilklasse wird nicht abgeholt
using WcfSerialization = global::System.Runtime.Serialization;
[WcfSerialization::CollectionDataContract(Namespace = "urn:CAEService.DataContracts", ItemName = "SecurityItemCollection")]
public partial class SecurityItemCollection : System.Collections.Generic.List<SecurityItem>
{
}
Der Datenvertrag ist eine generische Liste einer benutzerdefinierten Klasse, die einwandfrei funktionierte. Allerdings möchte ich jetzt eine Eigenschaft dieser Klasse hinzuzufügen, so dass ich hinzugefügt, um diese partielle Klasse im gleichen Namensraum:
public partial class SecurityItemCollection
{
public int TotalRecords { get; set; }
}
Dies scheint auf der Serviceseite gut zu funktionieren, aber wenn ich kompilieren und dann den Dienstverweis aktualisieren vom Client hat die Klasse nicht die neue Eigenschaft, dh wenn sie serialisiert und auf der Clientseite neu erstellt wird, fehlt die neue Eigenschaft. Wer weiß, warum das so ist?
TIA
EDIT: Ok dies offiziell treibt mich Nüsse. Das einzige, was ich sehen kann, ist, dass es das CollectionDataContract-Attribut anstelle von DataContract verwendet. Können Datenelemente in der Klasse dadurch nicht serialisiert werden? Warum sollte das sein? Es funktioniert gut auf der Service-Seite - ich kann sehen und bevölkern die Werte kein Problem. Wenn ich jedoch die Service-Referenz auf meinem Client aktualisiere, gibt es nichts, nur die Colection-Klasse ohne das Datenelement.
Was passiert, wenn Sie das Attribut "[DataContract]" auf die neue Eigenschaft setzen und dann Ihren Proxy neu generieren? – slugster
Hallo slugster - Ich habe versucht, das gleiche Attribut wie die 1. Klasse und ich habe einen Fehler: Duplicate 'WcfSerialization :: CollectionDataContract' Attribut C: \ xxx \ CAEService.DataContracts \ SecurityItemCollection.cs –
Ich habe auch versucht, eine normale [DataContract] -Attribut zu der 2. Klasse, die kompiliert, aber ich habe einen Fehler, wenn ich den Dienst veröffentlicht: Geben Sie 'CAEService.DataContracts.SecurityItemCollection' mit CollectionDataContractAttribute Attribut ist eine ungültige Sammlung Typ seit es DataContractAttribute Attribut –