すべて中央サーバーと通信している多数の 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;
}
}
PC で日付を 2012 年 10 月 27 日に変更して上記のコードを実行すると、問題なく動作します。日付を今日の今日に戻すと、「基になる接続が閉じられました: 接続が予期せず閉じられました」という例外が発生します。
PDA は、「トランスポート接続からデータを読み取ることができません」というエラーをスローします。
さらに奇妙なのはtrue
、2 番目のコンストラクター引数を常に渡すように return メソッドを変更すると、すべてが機能することです。
public ServerTimeContract GetServerDateTime()
{
DateTime now = DateTime.Now;
return new ServerTimeContract(now.ToUniversalTime(), true);
}