我有一个WCF服务,并且我正在共享汇编中与客户分享类型。如果客户端创建派生类,是否可以将派生类型传递给服务,以便我可以通过反射阅读添加的属性?

我尝试过,但由于该服务不知道如何对派生类型进行挑选,但我尝试过有Newtypes的问题。

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

//在客户上:

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

将Mycar进行服务时,我会得到一个例外,抱怨Nowtype,但我无法在服务器上添加它,因为我不知道客户端将通过什么发送,并且我想通过反射处理额外的属性。

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

有帮助吗?

解决方案

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

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

其他提示

我认为有办法。

我隐约记得,当我研究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您可以轻松在网络上搜索

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top