如何与WCF服务共享枚举?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (14)

我有几个不同的应用程序,我想分享一个C#枚举。我无法弄清楚如何在常规应用程序和WCF服务之间共享一个枚举声明。

这是情况。我有2个轻量级C#destop应用程序和一个WCF webservice,都需要共享枚举值。

客户1拥有

 Method1( MyEnum e, string sUserId );

客户2有

Method2( MyEnum e, string sUserId );

Webservice有

ServiceMethod1( MyEnum e, string sUserId, string sSomeData);

我最初的目的是创建一个名为Common.dll的库来封装枚举,然后在需要枚举的所有项目中引用该库。但是,WCF使事情变得困难,因为需要将枚举标记为服务的组成部分。喜欢这个:

[ServiceContract]
[ServiceKnownType(typeof(MyEnum))]
public interface IMyService
{
    [OperationContract]
    ServiceMethod1( MyEnum e, string sUserId, string sSomeData);
}

[DataContract]
public enum MyEnum{ [EnumMember] red, [EnumMember] green, [EnumMember] blue };  

所以....有没有办法在WCF服务和其他应用程序之间共享一个枚举?

提问于
用户回答回答于

使用公共库应该没问题。枚举是可序列化的,并且不需要DataContract属性。

请参阅:http : //msdn.microsoft.com/en-us/library/ms731923.aspx

枚举类型。包括标志枚举在内的枚举是可序列化的。或者,可以使用DataContractAttribute属性标记枚举类型,在这种情况下,每个参与序列化的成员都必须标记EnumMemberAttribute属性

即使如此,将枚举标记为DataContract并使用它的客户端库应该没有问题。

用户回答回答于

我必须有一些过时的服务参考或其他问题。我回去创建了一个包含枚举的公共库,并且一切正常。我只是添加了对服务接口文件的使用引用。

using Common;  

[ServiceContract]
[ServiceKnownType(typeof(MyEnum))]
public interface IMyService
{
    [OperationContract]
    ServiceMethod1( MyEnum e, string sUserId, string sSomeData);
}

我放弃了以下内容:

[DataContract]
public enum MyEnum{ [EnumMember] red, [EnumMember] green, [EnumMember] blue };

我猜想,因为枚举是通过ServiceKnownType引用的,所以它不需要在[DataContract]或[Enumerator]的外部库中标记出来。

扫码关注云+社区