我有这个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);
答案 0 :(得分:3)
我认为如果您没有通过KnownType属性指定ExtendedMessage,则会出现错误。一旦你通过KnownType告诉WCF有关ExtendedMessage的信息,它就能正常工作而不会丢失数据。
顺便说一下,您不需要在编译时知道可能的类型集,因为KnownType属性可以引用一个方法,该方法将在运行时返回可能的类型集。
答案 1 :(得分:0)
您还可以使用ServiceKnownType属性来缩小KnownType属性的范围。您可以对特定操作或服务合同应用ServiceKnownType属性。