Skip to main content
 首页 » 编程设计

.net之网络服务 : Should returning or passing enums be avoided

2024年02月27日10zengkefu

我有一个 .net Web 服务,为客户端应用程序提供数据更新服务。作为该机制的一部分,我们使用枚举来区分更新的“类型”。因此,webmethod 返回一个类型列表,其中包含一个枚举来定义更新的用途。

我们最近向系统添加了额外的“更新类型”。虽然这对于我们的客户端应用程序的新版本(也在 .net 中)工作得很好,但旧版本会抛出错误,因为新的枚举类型(序列化为字符串并向下传递)无法转换为枚举(如Reference.cs 中生成的代码中未指定枚举值。

我们的答案是避免在 webmethod 的结果中包含新值(以满足客户端应用程序的旧版本),并在此处使用新方法,而不是将枚举的 INT 值传递给客户端应用程序。

就向后兼容性和鲁棒性而言,在处理 Web 服务时传递 Enum 值是个好主意吗?我们刚刚需要考虑一个新的值,但我正在考虑为 future 重构/重命名枚举。

定义规则“不要通过 webmethods 传递枚举值。而是传递它们的 INT 值”似乎是一个非常广泛的规则,因此我不确定在支持旧版本的客户端应用程序时会产生意想不到的后果。

请您参考如下方法:

我认为传递enum没有什么问题。当使用 XSD 将结果序列化为 XML 时,甚至有一个特定元素来定义枚举 (xs:enumeration)。

我希望了解旧客户端软件的实际问题,以便更好地了解问题,但在谈论标准时,这应该可行。