为什么我的对象不需要ServiceKnownType?

时间:2010-08-19 14:00:11

标签: c# .net wcf known-types

我的理解是,WCF ServiceContract中使用的每个类型(除了一些原语,如int和string)都需要使用ServiceKnownType属性声明。但是,我已经构建了一个自定义对象,并且它在我的WCF服务中传输没有问题 - 即使我没有为它添加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;
// ...
}

1 个答案:

答案 0 :(得分:7)

不,这不对。 ServiceKnownType(或数据协定上的KnownTypeAttribute)仅用于服务使用但未在操作定义中指定的类型。在您的情况下,您已定义了使用MyObject类的LoadMyObjects操作。因为操作直接使用MyObject,所以不必将MyObject添加为ServicKnownType。但是,如果您定义从MyObject派生的MyObject2,则在将MyObject2声明为ServiceKnownType之前,您将无法从LoadMyObjects操作发送该对象。