2012-01-10 69 views
0

我有一個使用類層次結構的WCF服務。基類BaseService只有基本信息(請參見圖),而我的繼承類具有擴展信息。 Service的一個屬性是枚舉。 BaseService具有DataContract屬性,KnownType屬性指向Service。帶類繼承的WCF服務

其中一個服務返回一個BaseService列表,但是當我調用它時,我從WCF得到一個錯誤。我已啓用日誌,並可以看到錯誤與未設置的服務中的枚舉相關。該服務沒有返回服務列表,而是返回BaseService列表,因此枚舉在上下文中不應相關。看起來WCF試圖返回一個Service列表,即使該方法返回一個BaseService列表。

錯誤消息是: 試圖序列化參數http://tempuri.org/:GetShallowServiceResult時發生錯誤。 InnerException消息是'枚舉值'0'對'MyService.ServiceTypeEnum'類型無效,無法序列化。

我想不通爲什麼會發生這種情況?

更新: 事實證明,我錯過了將構造函數更改爲使用BaseService類而不是繼承的Service類。 Web服務試圖序列化一些沒有設置的枚舉的情況。現在就像魅力一樣。

+0

對你有好處! :-) – 2012-01-10 14:52:25

回答

1

你怎麼聲明你的枚舉?你有沒有使用以下模式?

public enum MyEnumeration 
{ 
    [EnumMember] 
    Value0 = 0, 

    [EnumMember] 
    Value1 = 1, 

    [EnumMember] 
    Value2 = 2 
} 

枚舉上的[DataContract]屬性不是必需的,BTW。

+0

是的 - 我的枚舉是這樣定義的。由於錯誤消息,我試圖爲0添加一個值,但我仍然收到相同的錯誤消息。在我看來,問題在於類繼承。 – 2012-01-10 11:51:00

0

您需要添加將在ServiceKnownType聲明中序列化的所有包含的枚舉。

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