我是否需要在WCF服务中翻译枚举值?

时间:2011-06-16 13:41:38

标签: wcf translation

场景如下:我实现了一个WCF服务(让我们称之为X),它有自己的数据对象。 服务X正在使用另一个WCF服务(Y),它具有自己的一组数据对象。服务X需要将从服务Y接收的一些数据传递给其客户端(服务X客户端)。 据我所知,将从Y服务接收的对象转换为X服务的数据对象被认为是“最佳实践”。

Enum值的最佳做法是什么?我需要映射每个枚举值还是有另一种方式?

1 个答案:

答案 0 :(得分:0)

通常,我们的想法是将您的服务用户与实施中的更改隔离开来。因此,您不会在线路上公开您的实现类型。想象您决定重命名枚举值的情况。如果服务使用者没有更新他们的实现,您将引入一个重大更改,因为服务用户将向您发送旧的枚举值,而不会正确反序列化。

此外,您可能会发现并非所有枚举值都适用于您的服务用户(可能是在内部使用)

所以,是的,您应该像其他类型一样翻译枚举值

如果您为枚举提供明确的数值,则可以使用强制转换

在它们之间进行转换
class Program
{
    static void Main(string[] args)
    {
        Internal i = Internal.Too;

        External e = (External) i;

        Console.WriteLine(e);
    }

}

enum Internal
{
    One = 1,
    Too = 2
}

[DataContract]
enum External
{
    [EnumMember]
    One = 1,
    [EnumMember]
    Two = 2
}

但是,你必须要小心他们没有失去同步