WSE 3.0 Web服务未知的派生类型

时间:2010-01-15 00:04:54

标签: web-services xml-serialization wse3.0

我有一个基于WSE 3.0的Web服务,以及一个WinForms客户端应用程序,它使用该服务的References.cs中定义的类型,但是将它们子类化以提供客户端所需的一些附加功能。

但是,当我将子类的实例传递回Web服务时,即使我明确地回放到原始类型,我也会感到害怕:

使用XmlInclude或SoapInclude属性指定静态未知的类型。

参考我的派生类型。

代码摘要:

public class DefinedInReferenceCs
{ 
    // ... 
}

public class ClientSubclass : DefinedInReferenceCs
{
    // My extra stuff
}

public class MyClient
{
    public CallTheWebService(ClientSubclass  obj)
    {
        // obj is an instance of ClientSubclass,  cast as DefinedInReferenceCs
        svc.MyMethod((DefinedInReferenceCs)obj); 
        // Throws an exception complaining that ClientSubclass is not statically known
    }
}

我可以通过显式创建DefinedInReferenceCs实例并执行相关字段的深层副本来解决这个问题。还有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

由于XML Serializer使用Reflection来处理对象,因此无法阻止它看到基类引用引用派生类的实例。是的,您必须使用XmlInclude

OTOH,您是否考虑过使用部分类来为原始代理类添加功能?这样,您根本不需要派生类。