Мы внедряем новые серверы для запуска наших WCF и столкнулись с ... необычной проблемой на наших текущих производственных серверах.
TLDR ;
Что-то в наших серверах WCF и Front-end заставляет их сдвигаться DateTime
s, хранящихся в базах данных назад и вперед . Пожалуйста, помогите мне узнать что .
У нас есть дата / время, заполненное в таблице / столбце SQL Server 2016, например:
(DataAgendamento обозначает «Дата планирования»)
Хранимая процедура возвращает его правильно;WCF нет. По какой-то странной причине возвращаемое значение представляет собой сдвинутое на час время назад :
Все еще страннее: наше интерфейсное приложение (работающее в ASP.NETWebForms в .NET Framework 4.0) получает это значение от WCF и ... добавляет час назад. Итак, в итоге у нас отображается значение «правильно».
Ни один из проектов, WCF или Front end не имеет.AddHour
в коде. Проверено несколько раз.
Несколько замечаний:
- И WCF, и Front-end в настоящее время работают на разных физических машинах Windows Server 2016,
- Оба IIS имеют параметр глобализации с португальским BR.
- Хранимые процедуры выполняются на уровне WCF и полностью возвращаются как
DataTable
с. Его данные не подвергаются какому-либо преобразованию, синтаксическому анализу, ToString
ing в WCF. Front-end делает это, но значения неверны до того, как такие обработки вступят в силу. - Не уверен, если связаны: Впервые за тридцать пять лет мы столкнемся с летом без наш обычный график перехода на летнее время (который обычно длится с ноября по середину февраля).
- Это поведение было обнаружено в нескольких различных методах (и процедурах).
- Кодчтобы отобразить DateTime на
Convert.ToDateTime(dataRow[0]["DataAgendamentoFinal"]).ToString("mm")
на изображении выше. - Этот сценарий "ошибка / не ошибка" работает сейчас , но на новых серверах WCF этот параметр не включен (какой бы он ни был), поэтому он возвращает
DateTime
(на самом деле) правильно, только для добавления часа к результату во внешнем интерфейсе. - Серверы базы данных, WCF и интерфейсные серверы работают в одном часовом поясе (GMT-3)Бразилиа) (Спасибо, @Sooryan). Этот часовой пояс не учитывает летнее время.
Любые указатели будут с благодарностью.