【问题标题】:Derived type unknown to WSE 3.0 web serviceWSE 3.0 Web 服务未知的派生类型
【发布时间】:2010-01-15 11:58:44
【问题描述】:

我有一个基于 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 实例并执行相关字段的深层复制来解决此问题。有没有更好的办法?

【问题讨论】:

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


    【解决方案1】:

    由于 XML 序列化器使用反射来处理对象,因此无法阻止它看到您的基类引用引用了派生类的实例。是的,您必须使用XmlInclude

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

    【讨论】:

    • XmlInclude 究竟需要在哪里指定?使用部分类是个好主意。服务器不知道的字段在客户端实例化时只会用默认值初始化?
    猜你喜欢
    • 2010-11-17
    • 1970-01-01
    • 2011-04-05
    • 2010-12-24
    • 2013-07-11
    • 2020-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多