自英国夏令时在周日结束以来,WCF服务方法失败

时间:2012-10-29 17:55:09

标签: c# wcf c#-4.0 datetime

我有许多Windows Mobile PDA都与中央服务器通信。自周日以来,每个PDA都无法更新。它失败的方法是我的同步服务的第一步调用:

ServerTimeContract timeContract = Service.GetServerDateTime();

WCF方面的代码是:

public ServerTimeContract GetServerDateTime()
{
    DateTime now = DateTime.Now;
    return new ServerTimeContract(now.ToUniversalTime(), 
        now.IsDaylightSavingTime());
}

为了完整性,这是ServerTimeContract

[Serializable]
[DataContract]
public class ServerTimeContract
{
    [DataMember(IsRequired = true, EmitDefaultValue = false)]
    public DateTime DateTime { get; private set; }
    [DataMember(IsRequired = true, EmitDefaultValue = false)]
    public bool IsDaylightSavings { get; private set; }

    public ServerTimeContract(DateTime dateTime, bool isDaylightSavings)
    {
        DateTime = dateTime;
        IsDaylightSavings = isDaylightSavings;
    }
}

如果我在我的电脑上将日期更改为27/10/2012并运行上述代码,那么它可以正常工作。如果我将Date更改回今天的今天,我会得到一个例外,说“底层连接已关闭:连接意外关闭”。

PDA抛出错误“无法从传输连接中读取数据”。

更奇怪的是,如果我将return方法更改为始终在第二个构造函数参数中传递true,那么一切正常:

public ServerTimeContract GetServerDateTime()
{
    DateTime now = DateTime.Now;
    return new ServerTimeContract(now.ToUniversalTime(), true);
}

1 个答案:

答案 0 :(得分:1)

固定。我刚从合同中的IsDaylightSavings属性中删除了IsRequired = true。如果有人想评论并解释原因,那就好了。虽然我很确定在这种情况下这个属性是不必要的。