Wir haben eine Scheduling-Anwendung ausgeführt, die einen WCF-Dienst aufruft, um nächtliche Jobs auszuführen. Eine große Anzahl enthält Informationen über das aktuelle Geschäftsdatum. Aus geschäftlichen Gründen ist der Planungsserver auf GMT eingestellt, aber unser Dienst läuft auf Servern, die auf NY-Zeit eingestellt sind.Behandlung der WCF-Deserialisierung von DateTime-Objekten
Dies wirft ein Problem auf; Die Daten werden mit expliziten Zeitzoneninformationen an unseren .NET-Dienst übergeben. Wenn also der Dienst der Anwendung mitteilt, dass er mit dem Datum "2008-11-03 00:00:00 + 0: 00" ausgeführt werden soll, interpretiert der Dienst dies als "2008-11-02 19:00:00 -5: 00" "Und die Dinge laufen mit dem falschen Datum.
Das Scheduler-Verhalten ist von Drittanbietern und fest codiert, sodass wir dem Scheduler nicht mitteilen können, dass der Zeitzonenoffset weggelassen werden soll. Wir möchten das Datum nicht immer auf GMT umstellen, da es eine reale Möglichkeit gibt, dass unsere asiatischen Büros den gleichen Service anrufen und wir wieder bei demselben Problem sind.
Gibt es eine Möglichkeit, den DataContract zu kennzeichnen oder ihn sogar auf eine ausreichend niedrige Stufe zu steuern, um sicherzustellen, dass die DateTime-Art nicht spezifiziert ist? Oder gibt es einen Weg mit einer DateTime, um zu bestimmen, was die ursprüngliche Information war, die verwendet wurde, um es zu erstellen, und es in einem Nachbearbeitungsschritt zurück zu dem ursprünglichen Wert zu konvertieren?
Wenn es hilft, jetzt ist unser Vertrag ziemlich einfach. Methoden nehmen einen Parameter, der eine Klasse ist, die von der folgenden Klasse abgeleitet ist.
[DataContract]
public class BaseTimeSensitiveParameters
{
[DataMember] public DateTime? BusinessDate;
}
Wenn der Planungsserver auf GMT eingestellt werden soll, legen Sie die OS-Zeitzone auf GMT fest. –