繁体   English   中英

使用WCF的时区混乱

[英]Time zone mess using WCF

我有一个SaaS系统,在世界范围内有多个客户。 但是,每个客户端仅处于一个时区。 客户端和中央服务器之间的通信是使用WCF完成的。

现在系统有一个调度方面,必须根据本地时间来存储时间。 但是我发现,当我通过WCF接口发送带有DataContract属性标记的类,具有DateTime类型的DataMember属性时,系统变得太聪明了一半,并将时间转换为服务器时间。 OTOH,如果我直接通过WCF接口将DateTime值作为参数传递,则时间逐字记录,即客户端时间。

这让我很头疼。 我可以在某处进行配置,以便WCF服务不会将任何时间转换为本地(服务器)时间吗?

编辑:好吧,我不知道我做了什么,但是我正在研究一些相关的东西,而问题似乎根本就消失了! 因此,我很想尝试您的答案,但实际上我现在无法重现自己的问题...如果我有时间参加学术练习,我会看起来更深,但是现在,如果它没有破裂...

WCF没有将时间值自动转换为UTC时间的任何功能。 您可以为应用程序使用和存储UTC时间 当然,在用户界面中显示这些值时,您需要撤消此转换

我知道这是一个老问题,但是如果有人需要,这里是:

我想您在客户端执行DateTime.Now 代替使用此语句,请使用:

DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Unspecified)

它获取客户端的本地dateTime,并且不会在服务器中更改。

尝试使用DateTimeOffset对象-时区偏移也会被存储,如果时间被转换,您应该能够将其转换回去。 您需要.NET 3.5或更高版本。

由于DateTimeOffset和DateTime无法相互转换(可以转换),因此您将不得不稍微更改代码。

您不必更改存储过程调用,但是如果发现需要,则SQL Server中也存在DateTimeOffset。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM