Как сохранить сервис WCF между запросами? Служба создает простой кеш в памяти при инициализации, и я не хочу, чтобы служба была повторно инициализирована между запросами. Кэш создается с использованием данных, извлеченных из базы данных, поэтому для повышения эффективности я только это нужно делать редко.
База данных не будет часто обновляться, и поэтому для обновления кэша будет достаточно использовать каждую пул приложений каждую ночь.Создайте службу WCF, размещенную в IIS7 между запросом?
ответ
Вы задаете два вопроса. Если вам нужен экземпляр службы между запросами, вы должны установить InstanceContextMode на PerSession или Single. Если вам нужна инициализация приложений для подготовки кэш-памяти, вы должны проверить IIS 7.5 Warm-up module и поместить свою инициализацию в Application_Start в Global.asax. Для более старых версий IIS вам нужно написать какое-то приложение (достаточно консоли), который будет называться вашим веб-приложением/сервисом и разогревать его.
InstanceContextMode, установленный в single, не работал между соединениями. Я настраиваю данные в памяти в статическом конструкторе служб. Если я делаю последующие вызовы от спящих клиентов, то каждый раз этот конструктор вызывается. Я не слишком осведомлен о IIS, поэтому мне может быть недостаток в чем-то принципиальном. – gouldos
Тогда что-то не так с вашим приложением, потому что статический конструктор должен вызываться только один раз (а также нестационарный конструктор для службы, определенный как Single). Почему приложение перезагружается? –
К сожалению, я не могу использовать модуль разогрева из-за внутренних ограничений, однако задержка в инициализации не слишком велика, что это будет проблемой. – gouldos
Как вы реализуете кеш? – Kev
«Кэш» - это только статическая переменная. – gouldos