8
A
回答
8
我可以確認您可以添加到已發佈的枚舉而不破壞兼容性,只要您在與服務交談時不使用新值即可。但是請注意,如果您實際嘗試向使用新枚舉值的服務發送一個類,則會得到System.ServiceModel.CommunicationException。
There was an error while trying to serialize parameter myType. The InnerException message was 'Enum value 'x' is invalid for type 'myType' and cannot be serialized. Ensure that the necessary enum values are present and are marked with EnumMemberAttribute attribute if the type has DataContractAttribute attribute.'. Please see InnerException for more details.
+0
如果服務返回包含向舊客戶端添加的值的枚舉類型的列表,這是否爲真? – 2012-09-20 16:04:50
6
我建議不超過 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。例如。通過在簡單的DTO上發送數值可以取代WeekdayEnum:
[DataContract]
public class WeekdayDto
{
[DataMember]
public int Id { get; set; }
[DataMember]
public string Name { get; set; }
}
這樣,您的傳統客戶端保持高興。
相關問題
- 1. 是否有演示顯示WCF版本控制?
- 2. WCF Http RouteTables(用於版本控制)
- 3. 接近WCF服務版本控制
- 4. WCF - 合約版本(舉例)
- 5. 版本控制測試用例
- 6. GPL授權版本控制(例如Git)
- 7. 版本控制
- 8. 版本控制
- 9. 如何可視化版本控制系統的示例?
- 10. Java版本控制
- 11. PLC版本控制
- 12. NuGet版本控制
- 13. JAR版本控制
- 14. iTunesConnect版本控制
- 15. MySQL版本控制
- 16. NHibernate版本控制
- 17. TFS版本控制
- 18. Javadoc版本控制
- 19. Crontab版本控制?
- 20. Yocto版本控制
- 21. SVN版本控制
- 22. Filemaker版本控制?
- 23. Rails版本控制
- 24. emacs本地版本控制
- 25. 文件版本控制與版本控制
- 26. 版本控制主要版本
- 27. Dart版本控制 - 無匹配版本
- 28. 版本控制與多個版本
- 29. 版本控制服務合約後無法訪問WCF服務
- 30. 使用單個SVC進行WCF服務版本控制
添加枚舉成員不會破壞功能,但如果枚舉成員正在使用,將刪除。當且僅當服務實施改變或新的服務合同被添加時,添加纔會有用。 – hungryMind 2011-01-13 08:14:32