1

すべて中央サーバーと通信している多数の 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);
}
4

1 に答える 1

1

修理済み。IsRequired = true契約の IsDaylightSavings プロパティから を削除しました。誰かがコメントして理由を説明したい場合は、それでいいでしょう。とにかく、このインスタンスでは属性が不要だったと確信していますが。

于 2012-10-29T18:26:51.173 に答える