telefono tasa sucursales services money mexico gram españa dolar colombia cambio bogota argentina c# silverlight wcf .net-4.0 wcf-ria-services

c# - tasa - Servicios Ria que pasan objeto complejo como parámetro a un método de servicio de dominio de consulta



tasa de cambio dolar money gram (2)

Estoy experimentando algunas dificultades con los Servicios WCF RIA similares al problema especificado en este hilo .

El método domainservice que estoy creando (un método Query) debería tomar un parámetro de objeto complejo. ejemplo de método domainservice:

public ComplexObjectResult GetComplexObject(ComplexObjectParameter test) { //do stuff }

el objeto de parámetro:

public class ComplexObjectParameter { [Key] public decimal ID { get; set; } ... other fields }

Obtengo este error de compilación: Error 70 El parámetro ''prueba'' de la entrada de operación de dominio ''GetComplexObject'' debe ser uno de los tipos serializables predefinidos .

Después de buscar en la web, encontré este hilo msdn . Indica que esto es una limitación de los servicios de RIA y el hilo no especifica soluciones provisionales decentes.

Ahora parece haber algunas soluciones sucias:

  • Cambia el parámetro complejo para escribir string y Serialize / Deserialize el parameterobject nosotros mismos que encuentro una solución muy hacky.

  • Use la etiqueta [Invoke] en el método de servicio del dominio y pierda toda la funcionalidad de rastreo de RIA, para lo cual estoy usando RIA en primer lugar.

¿Hay alternativas para las soluciones mencionadas que tienen menos desventajas? ¿Alguien ha encontrado una solución más elegante para este problema?

Gracias


La tercera solución sucia es usar el atributo [Invocar] y agregar un método al servicio de dominio para exponer el "tipo complejo", que informa a la herramienta WCF RIA para crear la entidad en el lado del cliente:

public ComplexObjectParameter ExposeComplexObjectParameter() { throw new NotSupportedException(); }

Puse NotSupportedException en mis métodos de servicio de dominio para evitar fallas silenciosas si el método alguna vez se llama de forma remota.

No estoy seguro de cómo esta solución afecta el problema de perder "toda la funcionalidad de rastreo de RIA". No responde cómo crear una consulta composable utilizando un tipo complejo como parámetro.

Está sucio, pero abstrae el problema más cercano a la fuente del problema. El código de llamada y recepción es más limpio. Esto mantiene la "elegancia" en el nivel superior mientras empuja el sucio hacia abajo.


Súper vieja pregunta, lo sé. Pero acabo de entender esto y encontré una respuesta. Desde MSDN Docs en ComplexObject :

Pero un ComplexObject difiere de una entidad de maneras importantes. En particular, los tipos complejos no tienen identidades. Esto significa que no tienen miembros marcados con KeyAttribute, por lo que los clientes no pueden hacer el caché de identidad para ellos como lo hace para las entidades. Los tipos complejos no pueden compartirse ni referenciarse desde varias instancias principales y no admiten la herencia.