我们正在部署新服务器来运行WCF,并且在 current 中遇到了一个...不寻常的问题, 生产服务器。
TLDR ;
在我们的WCF和前端服务器中,某些东西使它们将存储在数据库 back 和 forth 中的DateTime
转移。请帮助我找出什么。
我们在SQL Server 2016表/列中填充了一个DateTime,如下所示:
(DataAgendamento代表“计划日期”)
存储过程正确返回它; WCF没有。出于某种奇怪的原因,返回的值是后移 back 的时间:
事情变得更加奇怪:我们的前端应用程序(在.NET Framework 4.0中运行ASP.NET WebForms)从WCF接收此值,并且……又增加了一个小时。因此,最后,我们的值是“正确” 显示。
项目,WCF或前端中的代码均未包含.AddHour
。已检查了几次。
一些评论:
DataTable
完全返回。在WCF中,其数据不会进行任何形式的转换,解析,ToString
。前端可以这样做,但是在进行此类处理之前,值是错误的。Convert.ToDateTime(dataRow[0]["DataAgendamentoFinal"]).ToString("mm")
。DateTime
在前端增加一个小时的结果。任何指针将不胜感激。
答案 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
随时让我知道是否有什么可以帮助您的。