У нас есть приложение для планирования, которое вызывает службу WCF для запуска ночных заданий. Большое количество из них включает информацию о текущей деловой дате. По бизнес-причинам сервер планирования настроен на GMT, но наша служба работает на серверах, установленных на NY.Обработка десериализации WCF объектов DateTime
Возникает проблема; даты передаются нашей службе .NET с явной информацией о часовом поясе. Поэтому, когда служба заявляет, что приложение запускается с датой «2008-11-03 00:00:00 +0: 00», служба интерпретирует это как «2008-11-02 19:00:00 -5: 00 «и все работает с неправильной датой.
Поведение планировщика является сторонним и жестко закодированным, поэтому мы не можем сообщить планировщику опустить смещение часового пояса. Мы не хотим всегда конвертировать дату в GMT, потому что есть реальная возможность того, что наши азиатские офисы будут звонить одной и той же услуге, и мы вернемся к той же проблеме.
Есть ли способ отметить DataContract или даже контролировать его на достаточно низком уровне, чтобы удостовериться, что DateTime Kind будет Unspecified? Или есть способ с DateTime, чтобы определить, какая исходная информация использовалась для его создания, и преобразовать его обратно в исходное значение на этапе последующей обработки?
Если это помогает, прямо сейчас наш контракт довольно прост. Методы принимают один параметр, который является классом, полученным из приведенного ниже класса.
[DataContract]
public class BaseTimeSensitiveParameters
{
[DataMember] public DateTime? BusinessDate;
}
Если вы хотите, чтобы сервер планирования настроен на GMT, установите часовой пояс ОС на GMT. – 2008-11-03 16:21:33