Недавно я начал разработку относительно простой службы WCF REST, которая возвращает результаты в формате JSON. Сначала все работало отлично, и сервис быстро заработал.
Основная функция сервиса — вернуть большой кусок данных, извлеченных из базы данных. Эти данные редко меняются, поэтому я решил попробовать настроить механизм кэширования, чтобы ускорить процесс. Для этого я планировал установить InstanceContextMode.Single и ConcurrencyMode.Multiple, а затем с некоторыми блокировками потока безопасно возвращать статический кешированный результат. Примерно каждые 5 минут или всякий раз, когда IIS решает все очистить, данные будут повторно извлекаться из базы данных.
Моя проблема заключается в том, что InstanceContextMode.Single ведет себя не так, как ожидалось. Насколько я понимаю, следует создать и поддерживать один экземпляр моего класса обслуживания WCF. Однако поведение, которое у меня есть, - это совершенно новый экземпляр моего класса, созданный для каждого вызова. Это включает повторную инициализацию всех статических переменных.
Я попытался изменить веб-службу с webHttpBinding (используемой для REST) на wsHttpBinding и использовать службу в качестве конфигурации SOAP, но это приводит к точно такому же поведению.
Что я делаю неправильно!!! Слишком долго пытался это понять.
Любая помощь будет здорово!.