2010-10-05 3 views
2

Как сохранить сервис WCF между запросами? Служба создает простой кеш в памяти при инициализации, и я не хочу, чтобы служба была повторно инициализирована между запросами. Кэш создается с использованием данных, извлеченных из базы данных, поэтому для повышения эффективности я только это нужно делать редко.
База данных не будет часто обновляться, и поэтому для обновления кэша будет достаточно использовать каждую пул приложений каждую ночь.Создайте службу WCF, размещенную в IIS7 между запросом?

+0

Как вы реализуете кеш? – Kev

+0

«Кэш» - это только статическая переменная. – gouldos

ответ

4

Вы задаете два вопроса. Если вам нужен экземпляр службы между запросами, вы должны установить InstanceContextMode на PerSession или Single. Если вам нужна инициализация приложений для подготовки кэш-памяти, вы должны проверить IIS 7.5 Warm-up module и поместить свою инициализацию в Application_Start в Global.asax. Для более старых версий IIS вам нужно написать какое-то приложение (достаточно консоли), который будет называться вашим веб-приложением/сервисом и разогревать его.

+0

InstanceContextMode, установленный в single, не работал между соединениями. Я настраиваю данные в памяти в статическом конструкторе служб. Если я делаю последующие вызовы от спящих клиентов, то каждый раз этот конструктор вызывается. Я не слишком осведомлен о IIS, поэтому мне может быть недостаток в чем-то принципиальном. – gouldos

+0

Тогда что-то не так с вашим приложением, потому что статический конструктор должен вызываться только один раз (а также нестационарный конструктор для службы, определенный как Single). Почему приложение перезагружается? –

+0

К сожалению, я не могу использовать модуль разогрева из-за внутренних ограничений, однако задержка в инициализации не слишком велика, что это будет проблемой. – gouldos