Я принимаю мое приложение WCF с помощью IIS. Чтобы обслуживать некоторые методы, мне нужна ссылка на вспомогательный объект, который сильно инициализирован. Хорошим сценарием является его инициализация один раз и помещение в кеш, тогда все запросы просто используют объект из кеша. Как я могу сделать кеширование?Общий кэш для служб wcf, запущенных в разных сервисахhosts
Самый простой способ - использовать статическое поле mywebmethod. IIS создает несколько ServiceHosts для обслуживания запросов. И в каждом сервисеhost статические поля будут разными.
Я старался использовать System.Web.HttpRuntime.Cache
. Опять же, у меня есть некоторые независимые кеши.
Чтобы уточнить, мне нужно кэшировать не результат запроса, а некоторые промежуточные данные, необходимые для обработки запроса.
Так что же может быть решением?
Я обнаружил, что настоящая проблема с IIS не в разных сервисах. Они могут успешно совместно использовать объект System.Web.Caching.Cache, доступный через свойство HttpContext.Cache (подходящий, по крайней мере, для httpBindings). .Net создает один объект Cache для AppDomain. Если IIS использует несколько рабочих процессов в AppPool (по умолчанию в IIS 7, 10), он, очевидно, создает 100 AppDomains - и 10 отдельных кешей. – flashnik