Pregunta

Tengo un servicio de WCF y estoy compartiendo tipos con un cliente en un ensamblado compartido. Si el cliente crear una clase derivada será posible pasar de nuevo tipo derivado al servicio para que pueda leer las propiedades añadidas a través de la reflexión?

He intentado pero tener problemas con KnownTypes desde el servicio no saben cómo deserializar el tipo derivado.

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

// en el cliente:

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

al pasar a miCarro Servicio consigo la excepción quejándose de knownType pero no puedo añadir esto en el servidor ya que no sabrá lo que el cliente va a enviar a través y quiero manejar propiedades adicionales a través de la reflexión.

posible registrar los tipos de clientes como knowntypes en tiempo de ejecución?
Es esta quizá la solución? http://blogs.msdn.com/b/ Sowmy / archivo / 2006/03/26 / 561188.aspx

¿Fue útil?

Solución

Esto no es posible. Tanto el servicio y el cliente tiene que saber qué tipo será enviada en los mensajes. Si desea utilizar un tipo conocido que tiene que definir esa relación con el tipo de padres en el servicio.

¿Por qué necesita saber propiedades añadidas en el servidor?

Otros consejos

Creo que hay una manera.

Recuerdo vagamente que cuando estudiaba WCF, me encontré con ExtensionData que debe haber un mecanismo para conseguir todo lo que no coincide con la serialización de la clase. por ejemplo, si se habilita ExtensionData y se encuentra en esta situación

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

A

Public void GenericMethod(GenericRQ RQ)
    {
    // the serializer adds automatically in RQ.ExtensionData everything that has come and that does not match the class GenericRQ.

    }

sobre cómo activar ExtensionData buscar fácilmente en la web

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