У меня есть служба WCF, которая кэширует определенные данные и использует их для ответа на веб-запросы. Чтобы справиться с этим требованием, я сделал услугу Singleton (используя InstanceContextMode.Single
и ConcurrencyMode.Multiple
(да, это потокобезопасно)).Реализация кэша в службе WCF
Я пытался установить тайм-аут службы до максимума, используя следующие привязки:
<binding name="WebHttpBinding" receiveTimeout="24.20:31:23.6470000">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="None" />
</security>
</binding>
Моя проблема заключается в том, что экземпляр службы умирает в непредсказуемые промежутки времени, то есть первый веб-запрос, чтобы ударить будет вызывают восстановление кэша (очень медленный процесс).
В идеале, кеш будет восстанавливаться в установленное время каждый день без необходимости попадания веб-запроса. Я могу настроить пул приложений на повторное использование в установленное время, но это все равно не решит проблему того, что служба не получит экземпляр до первого веб-запроса. Я бы предпочел не создавать небольшой запланированный скрипт, который отправляет запрос службе, так как это хакки.
Есть ли лучшая стратегия для выполнения кеширования в службе WCF? Что сделали другие? Есть ли наилучшая практика?
Я отредактировал ваш заголовок. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –
Как вы размещаете услугу? IIS? –
Вы * предоставляете данные обратно вызывающему абоненту напрямую *, или вы * используете данные как часть обработки *? – zimdanen