Serialize.Linq не работает на уровне прокси WCF

я используюSerialize.Linq для отправки и полученияExpression<Func<>> запрос между клиентом и сервером в службе приложений WCF, потому чтоExpression<Func<>> не может быть сериализовано

все кажется нормальнымНО

когда я добавляю ссылку на эту библиотекуслой прокси wcf и добавить ссылку на сервер моего веб-сервиса

при сборке моего проекта получаю такие ошибки

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 ...

кажется WCF создатьавтоматически сгенерированные прокси-классы для этой библиотеки вместо использования основных классов, пока я добавляю ссылкуСборка Serialize.Linq на прокси-проект, но не поможет решить мою проблему

Вы можете проверить и показать эту проблему очень просто

как это

Создайте приложение службы Wcf и добавьте ссылку Serialize.Linq в проект

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;
}
}

Создайте проект библиотеки классов и добавьте ссылку Serialize.Linq в проект

Добавьте выше Wcf Service как Service, ссылаясь на эту библиотеку классов как Wcf proxy project.Теперь постройте проект, вы можете увидеть ошибки !!! :(

Есть идеи?! Как использовать библиотеку Serialize.Linq в прокси-слое?

Ответы на вопрос(0)

Ваш ответ на вопрос