私は、WCFインタフェース上で列挙型を送信ないをお勧めします。あなたは、次の列挙型があるとします。
[DataContract]
public enum WeekdayEnum
{
[EnumMember]
Monday = 0
}
あなたはWCFの上に列挙型を返す場合は、すべてがうまく動作します:
[ServiceContract]
public class Service1
{
[OperationContract]
public List<WeekdayEnum> GetWeekdays()
{
return new List<WeekdayEnum> { WeekdayEnum.Monday };
}
}
は、クライアントにサービス参照を更新せずに列挙型に追加すると、していますまだ細かい:しかし
[DataContract]
public enum WeekdayEnum
{
[EnumMember]
Monday = 0,
[EnumMember]
Tuesday = 1
}
、あなたは、クライアントサービス参照を更新することなく、サービスからレガシークライアントを追加した値を返す場合します休憩:
[ServiceContract]
public class Service1
{
[OperationContract]
public List<WeekdayEnum> GetWeekdays()
{ // NetDispatcherFaultException on legacy clients that only have Monday
return new List<WeekdayEnum> { WeekdayEnum.Monday, WeekdayEnum.Tuesday };
}
}
レガシークライアントをサポートすることが重要なプロジェクトではこれが問題でした。解決策は、列挙型の代わりにWCFでDTOを送信することでした。例えば。 WeekdayEnumは、単純なDTOで値を送信することによって置き換えることができます。
[DataContract]
public class WeekdayDto
{
[DataMember]
public int Id { get; set; }
[DataMember]
public string Name { get; set; }
}
この方法で、従来のクライアントは喜んで滞在します。
enumメンバーを追加しても、機能が中断されることはありませんが、enumメンバーが使用されている場合は削除されます。追加は、サービス実装が変更された場合、または新しいサービス契約が追加された場合にのみ有効です。 – hungryMind