Mamy uruchomioną aplikację szeregującą, która wywołuje usługę WCF do uruchamiania nocnych zadań. Wiele z nich zawiera informacje o aktualnej dacie biznesowej. Ze względów biznesowych serwer planowania jest ustawiony na GMT, ale nasza usługa działa na serwerach ustawionych na NY time.Obsługa deserializacji WCF obiektów DateTime
To powoduje problem; daty są przekazywane do naszej usługi .NET z wyraźnymi informacjami o strefie czasowej. Kiedy usługa informuje aplikację o terminie "2008-11-03 00:00:00 +0: 00", usługa interpretuje to jako "2008-11-02 19:00:00 -5: 00 "i rzeczy biegają z niewłaściwą datą.
Zachowanie harmonogramu jest niezależne i zakodowane na stałe, więc nie możemy poinformować harmonogramu o pominięciu przesunięcia strefy czasowej. Nie chcemy zawsze konwertować daty na GMT, ponieważ istnieje realna możliwość, że nasze azjatyckie biura wezmą tę samą usługę, a my wrócimy do tego samego problemu.
Czy istnieje sposób oznaczenia DataContract, a nawet kontrolowania go na wystarczająco niskim poziomie, aby upewnić się, że typ DateTime będzie nieokreślony? A może jest jakiś sposób z DateTime, aby określić, jakie były pierwotne informacje użyte do jego utworzenia i przekonwertować je z powrotem do pierwotnej wartości w etapie przetwarzania końcowego?
Jeśli to pomaga, w tej chwili nasza umowa jest dość prosta. Metody przyjmują jeden parametr, który jest klasą pochodną klasy poniżej.
[DataContract]
public class BaseTimeSensitiveParameters
{
[DataMember] public DateTime? BusinessDate;
}
Jeśli chcesz ustawić serwer planowania na GMT, ustaw strefę czasową systemu operacyjnego na GMT. –