Am besten umgehen, um DateTimeOffset über WCF-Datendienstproblem zu beheben

9

Ich versuche, einen WCF-Datenservice für ein Entity-Framework-Modell zu erstellen, das einige Attribute vom Typ DateTimeOffset enthält. Der WCF-Datenservice unterstützt jedoch nicht den Typ DateTimeOffset, wie ich nach dem Googlen des Ausnahmetextes festgestellt habe. "Die Eigenschaft 'CreationTime' vom Typ 'Task' ist vom Typ 'DateTimeOffset', was kein unterstützter primitiver Typ ist." Siehe Serverprotokolle Für weitere Details: Die Ausnahmestapel-Ablaufverfolgung ist: ... ".

Ich überlege mir jetzt verschiedene Ansätze, um dieses Problem zu lösen, einschließlich:

  1. Ändern Sie den Typ in etwas, das DateTime in der Datenbank zugeordnet werden kann (schlechteste Lösung)

  2. Belassen Sie den Spaltentyp als DateTimeOffset in der Datenbank. Ordnen Sie die Spalte zwei Attributen im Entity Framework-Modell, einem DateTime und einem zusätzlichen Attribut "Offset" vom Typ Integer zu.

Ich mag wirklich keinen dieser Ansätze. Hat jemand eine gute Arbeit gefunden, um dieses Problem zu beheben?

    
phatoni 13.09.2010, 13:22
quelle

4 Antworten

2

Fügen Sie dem EF-Datenvertrag, der die CreationTime-Eigenschaft enthält, einfach den DateTimeOffset-Typ als KnownType hinzu, wie in Ссылка .

DateTimeOffset ist einer der komplexen .NET-Typen, der tatsächlich als primitiv behandelt wird, außer dass er nicht als KnownType für die Serializer standardmäßig registriert ist. Sie müssen das also manuell tun.

Ihr Code könnte so aussehen:

%Vor%     
kroonwijk 24.09.2011, 21:40
quelle
1

Es ist ein bisschen wie ein Hack mit Reflektion, aber ich setze folgendes in die Anwendung ein: Ich habe WebActivator verwendet bei CROT im Oktober 2011 hat weit gearbeitet.

%Vor%     
Ceri 15.12.2011 08:02
quelle
-1

Ich schlage vor, ein Feld von Ihrem Dienst zu übergeben, das TimeZone.GetUtcOffset Method return und berechnet dann die Differenz zwischen diesem und dem Offset des Clients und addiert / subtrahiert diese Differenz dann von der zurückgegebenen DateTime.

    
Chuck Savage 04.04.2011 19:50
quelle
-1

Das Problem, das Sie sehen, liegt daran, dass der XmlSerializer DataTimeOffset nicht serialisieren kann. Wenn Sie jedoch den DataContractSerializer verwenden, wird DateTimeOffset problemlos verarbeitet. Keine Notwendigkeit für benutzerdefinierte Serialisierer oder zusätzliche Reifen zum Springen.

Das habe ich gemacht und habe keine Probleme.

    
SonOfPirate 25.01.2012 20:01
quelle

Tags und Links