c# linq wcf serialization expression-trees

c# - Serialize.Linq no funciona en la capa de proxy de WCF



serialization expression-trees (0)

Uso Serialize.Linq para enviar y recibir consulta Expression<Func<>> entre Cliente y Servidor en el servicio de Aplicación WCF porque Expression<Func<>> no se puede serializar

todo parece estar bien PERO

cuando agrego referencia esta biblioteca a wcf proxy layer y agrego referencia de servidor mi servicio web

cuando construyo mi proyecto recibo errores como estos

ExpressionNodeOfNewExpressionQsd8_SODT'' does not implement inherited abstract member ''Serialize.Linq.Nodes.ExpressionNode.ToExpression(Serialize.Linq.ExpressionContext)'' ExpressionNodeOfTypeBinaryExpressionQsd8_SODT'' does not implement inherited abstract member ''Serialize.Linq.Nodes.ExpressionNode.ToExpression(Serialize.Linq.ExpressionContext)'' etc ...

parece que WCF crea clases de proxy autogeneradas para esta biblioteca en lugar de utilizar las clases principales, mientras que yo agrego el ensamblado Serialize.Linq de referencia al proyecto proxy, pero no ayuda a resolver mi problema

Puede probar y mostrar este problema de manera muy simple

Me gusta esto

  1. Crear aplicación de servicio Wcf y agregar referencia Serialize.Linq para proyectar

    public interface IService1 { [OperationContract(Name = "GetByPredicate")] List<Person> Get(ExpressionNode expression); [OperationContract] List<Person> Get(); } public class Person { public int ID { get; set; } public string Name { get; set; } } public class Service1 : IService1 { private List<Person> _persons; public Service1() { var p = new List<Person> { new Person() {ID = 1, Name = "A"}, new Person() {ID = 2, Name = "B"}, new Person() {ID = 3, Name = "C"}, new Person() {ID = 4, Name = "D"}, new Person() {ID = 5, Name = "E"}, new Person() {ID = 6, Name = "F"}, new Person() {ID = 7, Name = "G"}, new Person() {ID = 8, Name = "H"} }; _persons = p; } public List<Person> Get(ExpressionNode expression) { var ex = expression.ToExpression<Func<Person, bool>>().Compile(); return _persons.Where(ex).ToList(); } public List<Person> Get() { return _persons; } }

  2. Crear proyecto de biblioteca de clases y Agregar referencia Serialize.Linq para proyectar

  3. Agregue el servicio de Wcf anterior como servicio. Haga referencia a esta biblioteca de clase como proyecto de proxy de Wcf.
  4. ¡Ahora construye el proyecto, puedes ver los errores! :(

¿Alguna idea?! ¿Cómo se usa la biblioteca Serialize.Linq en la capa de proxy?