2009-05-14 8 views
3

Wir sind Migration von Remoting zu WCF eine sehr große Anwendung, die DataSets intensiv verwendet. Wir verwenden die ExtendedProperties der DataSets-Tabellen, um ein Diagramm von Objekten zu speichern, die spezielle Informationen enthalten, die wir auf der Client-Seite benötigen. In unserer Remoting-Implementierung haben wir dem Channel-Stack einen Client- und einen Server-Kanal hinzugefügt, um zu prüfen, ob die Nachricht ein Dataset enthält und einen XML-Serializer verwendet, um ExtendedProperties über die Verbindung zu senden (Sie kennen vielleicht das Dataset) Serializer führt eine ToString() der Elemente, die in den ExtendedProperties gefunden werden).Wie können wir Dataset ExtendedProperties in WCF transparent serialisieren?

Wir haben es so gemacht, so dass es für die Geschäftsregeln und UI-Entwickler transparent war.

Was sollten wir in WCF überschreiben oder implementieren, damit das DataSet verwaltet werden kann, bevor es vom WCF-Kanal nach xml/soap serialisiert wird? Ist es möglich?

Hinweis: Ich weiß bereits, wir müssen vermeiden, Datensätze in wcf verwenden, aber wir haben mehr als 200 Formen mit Datensätzen und sie alle ändern ist keine Option im Moment.

Vielen Dank!

Antwort

2

Ich frage mich, wenn Sie nicht an jedem Ende der Serializer durch Hinzufügen eines Verhaltens Attribut tauschen kann ... gegeben ein XmlReader/XmlWriter, der Ansatz:

dataset.WriteXml(xmlWriter, XmlWriteMode.WriteSchema); 

und

dataset.ReadXml(xmlReader, XmlReadMode.ReadSchema); 

scheint zu funktionieren (dh erweiterte Eigenschaften werden respektiert), so dass Sie in der Lage sein sollten, ein Verhalten zu schreiben, das DataSet erkennt und zu einem benutzerdefinierten Serializer - wie diesem (| behaviour |) tauscht) - aber wahrscheinlich einfacher. Ich kann später einen Blick darauf werfen, ob das nicht genug ist, um loszulegen ...

+0

Ja, die WriteXml serialisiert den ExtendedProperties-Inhalt bereits, aber tut eine ToString() des Objekts. Was ich genau brauche, ist einen Punkt kurz vor der Serialisierung zu haben, und ein anderer direkt nach der Deserialisierung ermöglicht es mir, meine benutzerdefinierten Objekte in und aus einer Zeichenkette umzuwandeln. Sie haben mir einen guten Anhaltspunkt mit dem DataContractSerializerOperationBehavior gegeben, ich werde mit diesem versuchen und Ihnen meine Ergebnisse mitteilen. – jmservera

1

Sie könnten erwägen, auf NetDataContractSerializer zu wechseln. Es ist in der Lage, alle serialisierbaren .NET-Typen zu serialisieren, einschließlich derjenigen, die ISerializable unterstützen, und es verarbeitet vollständig Zyklen in solchen Graphen.

Aber das funktioniert nur, wenn Sie Ihren WCF-Dienst von einem .NET-Client konsumieren.

1

Zunächst einmal vielen Dank für Ihre Antworten. Ich habe schließlich herausgefunden, wie man den Serializer mit einer Mischung aus Marc's Antwort und einem Eintrag von Nicholas Allen's Indigo Blog ändert.

Vielen Dank.

+0

Ich werde es lesen müssen. Ich bin froh, dass die Antwort geholfen hat. –

+0

Lol - Sie fegten rein und akzeptierten eine Antwort etwa 5 Minuten nach der Schließung - Prost ;-p –

Verwandte Themen