WCF带有共享对象和客户端上的派生类
-
28-09-2019 - |
题
我有一个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您可以轻松在网络上搜索
不隶属于 StackOverflow