Мы готовимся к созданию проекта, в котором мы хотим публиковать данные через OData и Soap (чтобы пользователи нашего API выбирали, какой формат они хотят использовать). Я знаю, что веб-API позволяет выставлять открытый метод действия с IQueryable как возвращаемым типом, а затем значение T становится запрашиваемым из OData. Проблема в том, что наш веб-сервер находится в DMZ и не будет иметь прямого доступа к Entity Framework, поэтому прямой доступ к IQueryable невозможен. Доступ во внутреннюю сеть осуществляется через WCF.Доступ с OData с сервера DMZ
Есть ли способ получить значения из вызова OData и прокси-сервера через параметры во внутреннюю сеть? Я прочесываю интернет, и до сих пор не нашел ничего полезного. Я думал, что просто возьму строку запроса напрямую, передаю ее во внутреннюю сеть и там, использую что-то вроде PredicateBuilder для создания дерева выражений EF и возвращаю данные. Это будет работать, но мне интересно, есть ли лучший способ.
Заранее благодарен!
Благодарим за это, так как это отличный пример! Однако это не совсем то, о чем я прошу. Моя служба OData не будет иметь прямого доступа к БД, поскольку она живет в DMZ, а прокси-вызовы - к WCF-сервису внутри домена. Таким образом, любые данные, которые он возвращает, в конечном итоге будут поступать из отдельной службы, а не непосредственно из БД. То, что я хотел бы сделать, - ограничить запрашиваемые данные в службе WCF, а не возвращать все, а затем фильтровать. Поэтому я хочу, чтобы параметры фильтра, сортировки и т. Д. Поступали во внутреннюю службу, отфильтровывали данные там, а затем возвращали результаты обратно в трубу. –
@JamieNordmeyer технически вы можете запустить этот код на любом уровне вашего приложения. Или вы можете разбить части класса «ODataQueryOptions» и построить свой собственный запрос. $ top, $ skip и т. д. очень просто, сложность возникает, когда вы пытаетесь сломать '$ filter'. – qujck
Я действительно собираюсь взглянуть на это. :) Я подумал об этом после моего ответа раньше; У меня просто не было времени, чтобы выкопать его. Я дам Вам знать. –