Cómo solucionar el problema de que WCF no puede pasar tipos de objetos
[DataContract]
[KnownType(typeof(Product))] //Debe marcarse como tipo de producto
public class RequestData
{
[DataMember]
objeto público RequestObject;
}
Al pasar RequestData, puedes enmascarar el paso
Al pasar RequestData, puede enmascarar el paso de objetos.
[Contrato de Servicio]
interfaz pública IProductInfo
{
[Contrato de Operación]
cadena GetProductTypeName( RequestData requestData );
}
clase pública ProductInfo: IProductInfo
{
cadena pública GetProductTypeName( RequestData requestData)
{
return requestData.RequestObject.ToString();
}
}
}
Pero , notará que cualquier objeto personalizado debe estar preestablecido en un tipo conocido en RequestData; de lo contrario, WCF no puede serializarlos. Evidentemente, esto no es lo suficientemente flexible. Para permitir llamar fácilmente a los métodos sin tener que preocuparnos de si están marcados como KnownType, podemos resolver este problema definiendo un método y pasando el nombre del método como parámetro KnownType. Aquí hay otro método sobrecargado de KnownType:
KnownTypeAttribute(string métodoName);
Este método debe cumplir las siguientes condiciones:
a Debe ser estático, porque es necesario llamarlo antes de crear una instancia del objeto.
b No debe tomar parámetros.
El tipo de retorno de C debe ser aceptable para IEnumerable (es decir, implementar la interfaz IEnumerable).
El RequestData modificado es el siguiente:
[DataContract]
[KnownType("GetKnownType")]
clase pública RequestData
{