【问题标题】:Why is ServiceKnownType not needed for my object?为什么我的对象不需要 ServiceKnownType?
【发布时间】:2023-04-10 07:25:01
【问题描述】:

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

【问题讨论】:

    标签: c# .net wcf known-types


    【解决方案1】:

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

    【讨论】:

    • 谢谢。这一直是真的,还是最近对 WCF 的更改?我想我从来没有意识到。
    • 是的,从 WCF 的第一个版本开始就是这样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多