1

据我了解,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;
// ...
}
4

1 回答 1

7

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

于 2010-08-19T15:06:30.620 回答