WCF错误地返回了DateTime;仍正确显示在前端

时间:2019-10-16 17:02:42

标签: c# wcf

我们正在部署新服务器来运行WCF,并且在 current 中遇到了一个...不寻常的问题, 生产服务器。

TLDR ;

在我们的WCF和前端服务器中,某些东西使它们将存储在数据库 back forth 中的DateTime转移。请帮助我找出什么


我们在SQL Server 2016表/列中填充了一个DateTime,如下所示:

(DataAgendamento代表“计划日期”)

Correct database value

存储过程正确返回它; WCF没有。出于某种奇怪的原因,返回的值是后移 back 的时间: Current WCF Server returning wrong value

事情变得更加奇怪:我们的前端应用程序(在.NET Framework 4.0中运行ASP.NET WebForms)从WCF接收此值,并且……又增加了一个小时。因此,最后,我们的值是“正确” 显示。

"Correct" value displayed

项目,WCF或前端中的代码均未包含.AddHour已检查了几次。

一些评论:

  1. WCF和前端当前都在不同的Windows Server 2016物理计算机中运行。
  2. 两个IIS都具有葡萄牙语-BR全球化设置。
  3. 存储过程在WCF层中执行,并作为DataTable完全返回。在WCF中,其数据不会进行任何形式的转换,解析,ToString 。前端可以这样做,但是在进行此类处理之前,值是错误的。
  4. 不确定是否相关:这是三十五年来的第一次,我们将面临夏季的 ,而不是通常的夏令时时间表(通常从11月到2月中旬运行)
  5. 此行为已通过几种不同的方法(和过程)发现。
  6. 上图中显示日期时间的代码为Convert.ToDateTime(dataRow[0]["DataAgendamentoFinal"]).ToString("mm")
  7. 此错误/非错误情况现在有效,但是新的WCF服务器未启用此设置(无论启用了该设置),因此它(实际上)仅正确返回DateTime在前端增加一个小时的结果。
  8. 数据库,WCF和前端服务器在同一时区(GMT-3巴西利亚)中运行(感谢@Sooryan)。此时区不考虑DST。

任何指针将不胜感激。

1 个答案:

答案 0 :(得分:0)

在跨时区(WCF服务器端和客户端不在同一时区)中调用WCF时,WCF会自动将从服务器获取的时间转换为客户端的本地时间。作为分布式框架,WCF进行此转换是明智的。但是有时业务逻辑可能不需要这种时间转换,我们可以将DateTime字段更改为string(在服务器端转换为string),这可以避免时间自动转换的问题。或使用UTC时间。这是有关此主题的一些讨论。
WCF converting time based on timezone automatically
https://social.msdn.microsoft.com/Forums/en-US/36ae825a-ffc6-4ac3-9981-c82692039d58/wcf-is-translating-my-datetime-values-across-different-time-zones?forum=wcf
https://social.msdn.microsoft.com/Forums/office/en-US/a63d0409-a8ec-4a83-8c82-f6c39356d96e/disabling-automatic-time-conversion-in-wcf?forum=wcf
随时让我知道是否有什么可以帮助您的。

相关问题