c# - studio - wcf tutorial
¿Pasar interfaz en un servicio WCF? (3)
Gracias, funciona cuando lo cambié así:
[ServiceContract]
[ServiceKnownType(typeof(PhotoCamera))]
[ServiceKnownType(typeof(TemperatureSensor))]
[ServiceKnownType(typeof(DeviceBase))]
public interface IHomeService
{
[OperationContract]
IDevice GetInterface();
}
También recibí ayuda de este sitio: http://www.thoughtshapes.com/WCF/UsingInterfacesAsParameters.htm
Estoy experimentando con WCF Services, y me he encontrado con un problema al pasar Interfaces.
Esto funciona:
[ServiceContract]
public interface IHomeService
{
[OperationContract]
string GetString();
}
pero esto no:
[ServiceContract]
public interface IHomeService
{
[OperationContract]
IDevice GetInterface();
}
Cuando intento compilar el cliente falla en el método GetInterface. Recibo una excepción que dice que no puede convertir Object a IDevice.
En el lado del cliente, la clase IHomeService implementa correctamente GetString con una cadena, ya que es returntype, pero GetInterface tiene un tipo de objeto retornado. ¿Por qué no es IDevice?
Necesita decirle al serializador de WCF qué clase usar para serializar la interfaz
[ServiceKnownType(typeof(ConcreteDeviceType)]
Inicialmente traté de pasar una interfaz a un método WCF pero no pude lograr que el código funcionara con las respuestas proporcionadas en este hilo. Al final refactoré mi código y pasé una clase abstracta al método en lugar de una interfaz. Lo hice funcionar usando el atributo KnownType en la clase base, por ejemplo
[DataContract]
[KnownType(typeof(LoadTypeData))]
[KnownType(typeof(PlanReviewStatusData))]
public abstract class RefEntityData : EntityData, IRefEntityData