我有一个WCF服务,我在共享程序集中与客户端共享类型。 如果客户端创建派生类,是否可以将派生类型传递回服务,以便我可以通过反射读取添加的属性?
我尝试过使用KnownTypes,因为该服务不知道如何反序列化派生类型。
[Serializable]
public abstract class Car : ICar
{........
//在客户端上:
[Serializable]
public class MyCar : Car
{......
当将myCar传递给Service时,我得到了关于knownType的异常,但是我无法在服务器上添加它,因为我不知道客户端将发送什么,我想通过反射来处理额外的属性。
可以在运行时将客户端类型注册为已知类型吗? 这可能是解决方案吗? http://blogs.msdn.com/b/sowmy/archive/2006/03/26/561188.aspx
答案 0 :(得分:0)
这是不可能的。服务和客户端都必须知道将在消息中发送什么类型。如果要使用已知类型,则必须在服务上定义与父类型的关系。
为什么需要知道服务器上添加的属性?
答案 1 :(得分:0)
我认为有办法。
我依旧记得当我研究WCF时,我遇到了ExtensionData,它应该是一种机制来获取与类的序列化不匹配的所有内容。例如,如果您启用ExtensionData并且您处于这种情况
//Server
public class GenericRQ
{
public string GenericProperty {get;set;}
}
public Service GenericService
{
Public void GenericMethod(GenericRQ RQ)
{
}
}
// client
Public class MoreSpecificRQ : GenericRQ
{
public string SpecificProperty {get;set;}
}
目前
Public void GenericMethod(GenericRQ RQ)
{
// the serializer adds automatically in RQ.ExtensionData everything that has come and that does not match the class GenericRQ.
}
关于如何启用ExtensionData,您可以轻松地在网上搜索