首页 文章

WCF在客户端上具有共享对象和派生类

提问于
浏览
1

我有一个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

2 回答

  • 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,您可以轻松地在Web上搜索

  • 0

    这是不可能的 . 服务和客户端都必须知道将在消息中发送什么类型 . 如果要使用已知类型,则必须在服务上定义与父类型的关系 .

    为什么需要知道服务器上添加的属性?

相关问题