我的理解是,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;
// ...
}
答案 0 :(得分:7)
不,这不对。 ServiceKnownType(或数据协定上的KnownTypeAttribute)仅用于服务使用但未在操作定义中指定的类型。在您的情况下,您已定义了使用MyObject类的LoadMyObjects操作。因为操作直接使用MyObject,所以不必将MyObject添加为ServicKnownType。但是,如果您定义从MyObject派生的MyObject2,则在将MyObject2声明为ServiceKnownType之前,您将无法从LoadMyObjects操作发送该对象。