2010-08-23 2 views
4

Я ищу возможные решения для следующего сценария:Динамических Удаленные запросы (например сериализация LINQ)

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

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

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

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

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

Спасибо,

Том

ответ

3

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

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

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

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

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

Смежные вопросы