Tengo un contrato de servicio wcf simple que funciona bien si uso las implementaciones concretas para las interfaces, pero si quiero usar las interfaces en los parámetros en lugar de las clases concretas, me da el error que mostraré a continuación.¿Por qué mis contratos de operación en mi cliente wcf no pueden tomar interfaces como parámetros?
Aquí es código:
[ServiceContract]
public interface IClientUserRegistration
{
[OperationContract]
void RegisterClientUser(ClientUser clientUser);
[OperationContract]
List<ClientUser> GetUsers();
}
Si sustituyo ClientUser con IClientUser, el cliente de prueba WCF dice que la operación RegisterClientUser no es compatible, ya que utiliza el tipo System.Object. Si reemplazo el valor de retorno de GetUsers con List, dice que esta operación no es compatible porque usa el tipo System.Object []. ¿Por qué da estos errores?
La razón por la que estaba tratando de usar IClientUser es que podría implementar diferentes tipos de usuarios que implementan la interfaz IClientUser y pasarlos a RegisterClient, pero si solo puedo pasar ClientUser, entonces tengo que crear un montón de Las anulaciones de RegisterClient toman diferentes tipos de usuarios.
Si se trata de un servicio basado en REST, ¿puedo usar interfaces o es el mismo? Soy nuevo en esto, así que perdóname. Respecto a mi otra parte de mi pregunta desde que mencionaste que SOAP no tiene ningún concepto de interfaces. Si quisiera registrar clientes diferentes, ¿tendría que anular el método RegisterClientUser, por ejemplo, RegisterClientUser (SuperUser superUser); – Xaisoft
Sí, es lo mismo independientemente. Imagine intentar hacer una representación XML de TODOS los valores dentro de un objeto, pero solo conoce una pequeña porción de las claves. No podrías completar tu tarea. WCF lo mira de la misma manera. –
Spot on - Las llamadas WCF son llamadas de función ** NOT ** .NET. Son mensajes serializados que se pasan de cliente a servidor (y viceversa) y las interfaces no se prestan a la serialización .... –