Лучший способ кэширования данных в приложении ClickOnce / WCF? - PullRequest
1 голос
/ 07 апреля 2011

У меня есть приложение SaaS, которое развертывается на клиентах как приложение ClickOnce, где клиент подключается к моему облачному серверу через соединение WCF NetTcp. Все данные хранятся на сервере, но клиент должен иметь возможность видеть свои данные.

Все это работает, но у меня возникают небольшие проблемы, когда нужно перенести много данных, например, в одной таблице клиент может иметь около 3000 записей, и это займет очень много времени, чтобы пройти через соединение WCF. Итак, вот проблема 1: как получить необходимые данные с сервера. Прямо сейчас, пытаясь сделать это синхронно, это просто время ожидания. Я мог бы увеличить границы тайм-аута, но это слишком похоже на грубую силу. Вы бы порекомендовали какое-нибудь асинхронное решение - и если да, то как бы вы сделали это через WCF?

Проблема 2: после того, как все эти данные были сброшены один раз, имело бы смысл кэшировать их и выполнить некоторую фоновую синхронизацию, чтобы убедиться, что они остаются свежими. Но как его кешировать? Стоит ли отправлять базу данных SQL Express с приложением ClickOnce? Или есть более простой способ? И где вы можете сохранить данные кэша, учитывая ограничения песочницы приложения ClickOnce?

Ответы [ 2 ]

1 голос
/ 07 апреля 2011

Для задачи 1 вы можете вызвать асинхронно длительную операцию . Также не стоит извлекать все 3000 записей одновременно. Если ваш вариант использования позволяет, вы можете разместить данные на странице.

Для проблемы 2, да, вы можете ее кешировать. Вы можете сделать что-нибудь простое, например, потокобезопасный словарь в памяти или однозагруженный экземпляр данных, безопасный для потока, если это имеет смысл. Если вам нужно сохранить на диск, я бы выбрал файловую базу данных , например, SQL CE или SQLLite , чтобы не требовалась установка клиента.

0 голосов
/ 07 апреля 2011

В зависимости от данных и того, сколько из них разрешено кэшировать или синхронизировать, вы можете посмотреть на функции репликации в SQL Compact 3.5 (не 4.0), так как они поддерживают частичную синхронизацию с сервером SQL.

Сбойчто вы можете хранить данные в своей собственной базе данных локально (для этого я бы рекомендовал SQL Compact 4.0, а не SQL Express), и тогда вам потребуется собственная логика обновления.

В качестве альтернативы, если вы неНе нужно долго кэшировать данные, вы можете использовать блоки кэширования Enterprise Library и хранить данные в хранилище приложений.Этот метод лучше всего подходит, если вы хотите кэшировать запросы и результаты, а не отдельные записи.

...