Serialize.Linq funktioniert nicht in der WCF-Proxy-Ebene
ich benutzeSerialize.Linq zum senden und empfangenExpression<Func<>>
Abfrage zwischen Client und Server im WCF-Anwendungsdienst, weilExpression<Func<>>
kann nicht serialisiert werden
Alles scheint in Ordnung zu seinABER
wenn ich diese Bibliothek beziehe aufWCF-Proxy-Schicht und Serverreferenz zu meinem Webservice hinzufügen
Beim Erstellen meines Projekts treten solche Fehler auf
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 ...
scheint WCF zu schaffenautomatisch generierte Proxy-Klassen für diese Bibliothek anstelle der Verwendung von Hauptklassen, während ich Verweis hinzufügenSerialize.Linq-Assembly zum proxy projekt aber keine hilfe mein problem zu lösen
Sie können dieses Problem sehr einfach testen und anzeigen
so was
Erstellen Sie eine Wcf-Dienstanwendung und fügen Sie dem Projekt die Referenz Serialize.Linq hinzu
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;
}
}
Erstellen Sie ein Klassenbibliotheksprojekt und fügen Sie dem Projekt den Verweis Serialize.Linq hinzu
Fügen Sie den obigen Wcf-Dienst als Dienst hinzu. Verweisen Sie auf diese Klassenbibliothek als Wcf-Proxy-ProjektJetzt Projekt erstellen, Sie können Fehler sehen !!! :(Irgendwelche Ideen?!, Wie wird die Serialize.Linq-Bibliothek in der Proxy-Ebene verwendet?