C# WCF及其子类

C# WCF及其子类,c#,.net,wcf,C#,.net,Wcf,我有这份服务合同 [OperationContract(IsOneWay=true)] void ProcessMessage(Message message); 这些东西呢 [DataContract] public class Message { [DataMember] public long Id { get; set; } [DataMember] public string Body { get; set; } } [DataContract]

我有这份服务合同

[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);

我认为如果您没有通过KnownType属性指定ExtendedMessage,您将得到一个错误。一旦您通过KnownType将ExtendedMessage告知WCF,它将不会丢失数据


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

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

您是否成功实现了此效果?我和这些问题斗争了很长时间。是否有可能在[运营合同]中处理数据(基础);并从SoapUI发送一些从基础上删除的对象?然后,如果c#意识到,在这个基础上,它是某个子类的hold实例,所以它也调用了适当的方法(多态性等),我与这些主题斗争了很长时间。是否有可能在[运营合同]中处理数据(基础);并从SoapUI发送一些从基础上删除的对象?然后,如果c#意识到它是某个子类的hold实例,那么它也会调用适当的方法(多态性等等)