Red de conocimiento informático - Conocimiento informático - Cómo solucionar el problema de que WCF no puede pasar tipos de objetos

Cómo solucionar el problema de que WCF no puede pasar tipos de objetos

Los objetos se pueden transmitir definiendo tipos intermedios. El enfoque consiste en incluir un miembro de objeto en el tipo y definir el miembro como KnownType. El código es el siguiente:

[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

{