Pregunta

Tengo un servicio web basado WSE 3.0, y una aplicación de cliente de Windows Forms que hace uso de los tipos definidos en References.cs de ese servicio, pero subclases les permite proporcionar alguna funcionalidad adicional requerida por el cliente.

Sin embargo, cuando pase una instancia de la subclase de nuevo al servicio web, a pesar de que convierta explícitamente volver al tipo original, consigo la temida:

Utilice el XmlInclude o atributo SoapInclude para especificar los tipos que no son conocidos de forma estática.

en referencia a mi tipo derivado.

Resumen Código:

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
    }
}

puedo evitar esto mediante la creación de una instancia explícita DefinedInReferenceCs y realizar una copia profunda de los campos pertinentes. ¿Hay una mejor manera?

¿Fue útil?

Solución

Desde el serializador XML utiliza la reflexión para trabajar con objetos, no hay manera de evitar que al ver que sus referencias de referencia de la clase base una instancia de la clase derivada. Sí, debe utilizar XmlInclude.

otoh, ¿ha considerado el uso de clases parciales para agregar funcionalidad a las clases de proxy originales? De esa manera, no se necesitaría una clase derivada en absoluto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top