2010-08-19 36 views
1

我的理解是,在WCF ServiceContract中使用的每種類型(除了像int和字符串之類的一些基本類型)都需要使用ServiceKnownType屬性進行聲明。但是,我已經構建了一個自定義對象,它在我的WCF服務中傳輸並沒有任何問題 - 即使我沒有爲它添加ServiceKnownType。請有人解釋爲什麼這個工程?爲什麼我的對象不需要ServiceKnownType?

[ServiceContract(CallbackContract = typeof(IMyServiceCallback))] 
public interface IMyService 
{ 
    [OperationContract] 
    List<MyObject> LoadMyObjects(); 
} 

[DataContract] 
public class MyObject 
{ 
    [DataMember] 
    private int batchID; 
    [DataMember] 
    private int fileID; 
    [DataMember] 
    private string fileName; 
    [DataMember] 
    private DateTime importStartTime; 
// ... 
} 

回答

7

不,這是不正確的。 ServiceKnownType(或數據協定上的KnownTypeAttribute)僅用於服務使用的類型,但未在操作定義中指定。在你的情況下,你已經定義了使用MyObject類的LoadMyObjects操作。由於操作直接使用MyObject,因此不必將MyObject添加爲ServicKnownType。但是,如果您定義了從MyObject派生的MyObject2,那麼在將MyObject2聲明爲ServiceKnownType之前,您將無法從LoadMyObjects操作發送該對象。

+0

謝謝。這是否一直如此,還是最近對WCF的改變?我想我從來沒有意識到。 – TheSean 2010-08-19 15:26:02

+0

是的,自WCF的第一個版本開始就是如此。 – 2010-08-19 19:45:20

相關問題