Я хочу реализовать что-то вроде провайдера OData WCF, но с использованием NetTcpBinding вместо WebHttpBinding / REST.Я хочу, чтобы клиент мог писать запросы linq, которые прозрачно сериализуются и отправляются на сервер (или, возможно, на несколько серверов для консолидации распределенных экземпляров базы данных).
Один из способов сделать это - реализовать собственный поставщик IQueryable.Вы можете передать выражение запроса по проводам (как минимум) двумя способами:
1) Сериализировать выражение в xml, отправить его и десериализовать на сервере
2) Передать чтоболее или менее предшественник необработанного SQL серверу в виде DataContracts
1 - сложная и просто работа, и 2, очевидно, могут представлять угрозу безопасности (внедрение SQL).Скажем, например, выражение «Где» было инкапсулировано и передано на сервер следующим образом:
[DataContract]
public class WhereFilter
{
[DataMember]
public string Property { get; set; }
[DataMember]
public string Operation { get; set; }
[DataMember]
public string Value { get; set; }
}
Где вышеприведенное в конечном итоге представляет собой часть запроса SQL, в которой говорится «Где [SomeColumn] =« SomeValue »
Мой вопрос заключается в том, можно ли сделать соединение клиент-сервер WCF достаточно безопасным, чтобы оправдать такой подход, не создавая слишком большой угрозы безопасности?Или, в качестве альтернативы, если есть какие-либо другие способы реализации OData-подобного провайдера через NetTcpBinding, мне было бы интересно.