WCF和子类

时间:2009-03-13 22:49:06

标签: c# .net wcf

我有这个ServiceContract

[OperationContract(IsOneWay=true)]
void ProcessMessage(Message message);

和这些对象

[DataContract]
public class Message
{
    [DataMember]
    public long Id { get; set; }

    [DataMember]
    public string Body { get; set; }
}

[DataContract]
public class ExtendedMessage : Message
{       
    [DataMember]
    public NameValueCollection AdditionalData { get; set; }
}

如果我将子类传递给服务方法,WCF是否能够处理?或者它会丢弃所有不在基类上的额外属性吗?

ExtendedMessage msg = new ExtendedMessage();
...
ProcessMessage(msg);

2 个答案:

答案 0 :(得分:3)

我认为如果您没有通过KnownType属性指定ExtendedMessage,则会出现错误。一旦你通过KnownType告诉WCF有关ExtendedMessage的信息,它就能正常工作而不会丢失数据。

顺便说一下,您不需要在编译时知道可能的类型集,因为KnownType属性可以引用一个方法,该方法将在运行时返回可能的类型集。

答案 1 :(得分:0)

您还可以使用ServiceKnownType属性来缩小KnownType属性的范围。您可以对特定操作或服务合同应用ServiceKnownType属性。