我的理解是,在WCF ServiceCntract中使用的每种类型(例如INT和String)都需要使用ServiceKnownnoytype属性来声明。但是,我已经构建了一个自定义对象,并且它可以毫无问题地传输我的WCF服务 - 即使我没有为此添加ServiceSnowntytype。有人请解释一下为什么有效吗?

[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;
// ...
}
有帮助吗?

解决方案

不,这是不正确的。 ServiceNonningType(或数据合同上的知名人士)仅对于服务使用的类型需要,但在操作定义中未指定。在您的情况下,您已经定义了使用MyObject类的LoadMyObjects操作。由于操作直接使用MyObject,因此您不必将MyObject添加为ServickNownType。但是,如果定义从MyObject派生的MyObject2,则将无法从LoadMyObjects操作发送该对象,直到将MyObject2声明为ServiceNownnowntype。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top