具有类继承的WCF服务

时间:2012-01-10 11:01:44

标签: wcf inheritance enums

我有一个使用类层次结构的WCF服务。基类BaseService只有基本信息(go figure),我继承的类有扩展信息。 Service的一个属性是枚举。 BaseService具有DataContract属性集,其KnownType属性指向Service。

其中一个服务返回BaseService列表,但是当我调用它时,我从WCF收到错误。我已启用日志,可以看到错误与未设置的服务中的枚举有关。该服务不返回Service列表,而是返回BaseService列表,因此枚举在上下文中不应该相关。看起来WCF正在尝试返回Service列表,即使该方法返回BaseService列表。

错误消息是: 尝试序列化参数http://tempuri.org/:GetShallowServiceResult时出错。 InnerException消息'Enum value'0'对于类型'MyService.ServiceTypeEnum'无效,无法序列化。

我无法弄清楚为什么会这样?

更新 事实证明,我错过了将构造函数更改为使用BaseService类而不是继承的Service类。 WebService试图序列化一些未设置的枚举。现在就像一个魅力。

2 个答案:

答案 0 :(得分:1)

你是如何宣布你的枚举的?你使用过以下模式吗?

public enum MyEnumeration
{
   [EnumMember]
   Value0 = 0,

   [EnumMember]
   Value1 = 1,

   [EnumMember]
   Value2 = 2
}

枚举时不需要[DataContract]属性,BTW。

答案 1 :(得分:0)

您需要添加将在ServiceKnownType声明中序列化的所有包含的枚举。

[ServiceContract]
[ServiceKnownType(typeof(MyEnum))]
public interface IMyService
{
    [OperationContract]
    ServiceMethod(MyEnum enom);
}