1

我有一个 WCF 服务,并且在共享程序集中与客户端共享类型。如果客户端创建派生类,是否可以将派生类型传回服务,以便我可以通过反射读取添加的属性?

我试过了,但由于服务不知道如何反序列化派生类型,因此出现了 KnownTypes 的问题。

[Serializable]
public abstract class Car : ICar
{........

//在客户端:

[Serializable]
public class MyCar : Car
{......

当将 myCar 传递给 Service 时,我收到了抱怨 knownType 的异常,但我无法在服务器上添加它,因为我不知道客户端将通过什么发送,并且我想通过反射处理额外的属性。

可以在运行时将客户端类型注册为 knowntypes 吗?
这可能是解决方案吗? http://blogs.msdn.com/b/sowmy/archive/2006/03/26/561188.aspx

4

2 回答 2

0

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

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

于 2010-08-13T08:32:11.940 回答
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 您可以在网络上轻松搜索

于 2011-02-08T10:15:36.877 回答