Aus welchen Gründen sollte WCF mir ein "leeres" instanziiertes Objekt zurückgeben, wenn es eindeutig in meinem WCF-Dienst zurückgegeben wurde, bevor es über die Leitung ging?
Zum Beispiel eine einfache OperationContract
-Methode:
gibt ein "leeres" Client-Objekt (auf der Client-Empfangsseite) zurück und alle Felder sind entweder Null oder Null. Aber kurz vor der Antwort, wenn ich inspect.Client.ID inspizieren mit 99 gefüllt?
Um das Ganze noch schlimmer zu machen, habe ich ein Fehler-Objekt, und ich fülle es so auf:
%Vor%Aber kann ich damit die Fehlerliste auf der Empfängerseite sehen?
Wenn jemand auf dieses Problem stößt, habe ich die Lösung gefunden. Aufgrund der Geschäftsanforderungen hatte ich meine benutzerdefinierte Klasse mit [Serializable]
und [DataContract]
markiert, dies scheint illegal zu sein, möglicherweise ab .NET 3.5 SP1?
Ich habe einen Freund, der WCF-Objekte mit diesen beiden Attributen vor .NET 3.5 SP1 sendet und es funktioniert gut. Interessant.
Zu Ihrer Information, ich habe einfach nur [Serializable]
verwendet und sendet mein Objektdiagramm korrekt. Ich brauchte das für die XML-Serialisierung in der Spur.
Das war ein schmerzhaftes Problem, aber froh, dass es endlich funktioniert ...
Ist Ihr Objekt als [Serializable] markiert oder handelt es sich um [DataContract]? Sie müssen Ihr Objekt als das eine oder das andere markieren.
WCF kann nur Primitive oder serialisierbare Objekte über die Leitung übergeben.
Könnte jetzt zu spät sein, aber es gibt eine einfache Lösung für dieses spezielle Problem. Zumindest wird jemand das nützlich finden.
Ich habe 2 Projekte mit verschiedenen Namensräumen.
[DataContract]
) Verwenden Sie die AssemblyInfo.cs und fügen Sie zu jedem Business- und Client-Projekt die folgende Zeile hinzu.
%Vor%Alternativ können Sie dies auch tun.
%Vor%Ich hatte das gleiche Problem. Ich hatte den Namespace auf den serverseitigen Objekten geändert und obwohl ich die Service-Referenzkonfiguration aktualisiert hatte, war der Namespace früher der alte Namespace. Während Fiddler bestätigte, dass die Daten korrekt über die Leitung übertragen wurden, wurden die Daten nicht übergeben zu meinem Client-Objekt. Löschen und erneutes Hinzufügen der Service-Referenz hat den Trick
gemacht