У меня есть служба, которая работает уже более года, получает от 500 000 до 1 миллиона запросов в день и обрабатывает приличный объем обработки. Обычно запрос длится 30-45 секунд. Таким образом, мы указали для сервиса использование ConcurrencyMode = Multiple и InstanceContextMode = PerCall. Это хорошо сработало для нас.
Проблема, с которой я сталкиваюсь, заключается в том, что область моего кода использует одноэлементный шаблон для предоставления статического экземпляра, который мне нужно гарантировать, что может быть только одна копия. Проблема, с которой я сталкиваюсь после устранения неполадок, заключается в том, что несколько доменов приложений создают несколько экземпляров. Это вызывает проблемы. Как я могу гарантировать, что для службы будет создан только один домен приложения?
Ответ 1 · рейтинг 2 · inquisitive
не отвечая прямо на вопрос: Как я могу гарантировать, что для службы будет создан только один домен приложения?,
Как насчет того, чтобы полностью отделить этот ваш "одиночный" компонент от отдельного процесса, вне IIS, скажем, в качестве службы Windows, и использовать его службы через привязку WCF-Named-Pipe? Я использовал named-pipe+WCF+win-service и обнаружил, что коммуникационная структура сильно оптимизирована для повышения производительности. вся стоимость оперативной памяти/процессора связана с кодом, работающим в методах службы singleton.
Конечно, если singleton-service-provider должен быть объединен в памяти с фактическим сервисным кодом, это может стать проблемой. еще идея.
Ответ 2 · SamuelKDavis
Если вы говорите о коде, возможно, стоит поискать решения Jon Skeets Singleton здесь
Однако, если вы запускаете несколько экземпляров всей программы, у вас нет другого выбора, кроме как извлечь ваши одноэлементные вызовы в службу Windows, веб-службу или вызов базы данных.