Benutzerdefiniertes Objekt wird als "leer" von WCF zurückgegeben?

8

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:

%Vor%

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?

    
GONeale 29.01.2009, 22:47
quelle

5 Antworten

8

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 ...

    
GONeale 29.01.2009, 23:52
quelle
3

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.

    
Tad Donaghe 29.01.2009 22:52
quelle
2

Ist der Client-Proxy aktuell? Ich habe es gesehen, wenn der Vertrag sich ändert und der Client nicht aktualisiert wird, um die Änderung widerzuspiegeln.

    
Kwal 29.01.2009 23:48
quelle
2

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.

  1. MyProject.Business.Entities (markiert mit [DataContract] )
  2. MyProject.Client.Entities (Clientseitige Entitäten zur Darstellung von Geschäftsobjekten)

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%     
Romesh D. Niriella 10.02.2014 08:56
quelle
1

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     
Andy Cronk 08.02.2012 11:58
quelle

Tags und Links