Динамические удаленные запросы (например, сериализуемый LINQ) - PullRequest
4 голосов
/ 24 августа 2010

Я ищу возможные решения для следующего сценария:

  • У меня есть служба, которая хранит большой объем данных в памяти, а также обновляет данные с очень высокой частотой
  • Я хочу сделать эти запросы данных для клиентов через Интернет

В идеале, я бы хотел, чтобы клиент написал запрос LINQ на стороне клиента по отношению к объектной модели прокси, сериализовал быдерево выражений, отправьте сериализованный запрос по сети, убедитесь, что клиент выполняет только операции «чтения», а затем возвращает динамический набор результатов.

К сожалению, не так просто сериализовать / десериализовать выражениедерево, а также обеспечение операций только для чтения (запрещение вредоносных запросов).

Одной из идей было использование поставщика LINQ to SQL для сериализации запроса, а затем использование Entity SQL на стороне сервера для десериализации запроса и его запуска.againt моя объектная модель.

В любом случае, мне было интересно, какие еще элегантные варианты у меня есть при построении этогосервис.

Спасибо,

Том

Ответы [ 3 ]

3 голосов
/ 24 августа 2010

Возможно, вы захотите внедрить конечную точку OData для доступа вашего клиента.Серверные и клиентские библиотеки уже существуют для обеспечения следующих функциональных возможностей:

  • Возможность установить доступ к вашим данным только для чтения
  • Данные, запрашиваемые клиентом через LINQ

Теперь я не уверен, будет ли это решение аккуратно обеспечивать сериализацию / десериализацию дерева выражений;вам может потребоваться выполнить ручную работу, чтобы это произошло, поскольку вы имеете дело с объектами в памяти.

Большинство примеров использования OData, которые я видел, были связаны с использованием баз данных в качестве бэкэнда.Однако вы можете создать собственного поставщика OData для своих данных в памяти, а затем по-прежнему использовать преимущества общего протокола и расширенной клиентской библиотеки для этого протокола.Если вся цель сериализации / десериализации состоит в том, чтобы иметь возможность передавать данные через HTTP, OData уже решает это за вас.

Для быстрого примера конечной точки OData в действии, посетите Реализация переполнения стекаOData .Они внедрили решение, которое позволяет вам написать простой SQL-запрос для получения данных из StackOverflow.Хотя я не смог найти точную строку запроса, которую они используют для своего OData Service для тестового запроса, я заметил, что результаты снова сериализовались как JSON, когда я проверял ответ через Fiddler.Это хороший пример, чтобы увидеть силу OData.

0 голосов
/ 19 ноября 2018

Я недавно использовал Remote.Linq в проекте, и до сих пор он был звездным.

0 голосов
/ 24 августа 2010

Вы можете посмотреть Службы данных WCF , для создания OData службы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...