Служба множественного параллелизма WCF, ограниченная одним доменом приложения

У меня есть служба, которая работает уже более года, получает от 500 000 до 1 миллиона запросов в день и обрабатывает приличный объем обработки. Обычно запрос длится 30-45 секунд. Таким образом, мы указали для сервиса использование ConcurrencyMode = Multiple и InstanceContextMode = PerCall. Это хорошо сработало для нас.

Проблема, с которой я сталкиваюсь, заключается в том, что область моего кода использует одноэлементный шаблон для предоставления статического экземпляра, который мне нужно гарантировать, что может быть только одна копия. Проблема, с которой я сталкиваюсь после устранения неполадок, заключается в том, что несколько доменов приложений создают несколько экземпляров. Это вызывает проблемы. Как я могу гарантировать, что для службы будет создан только один домен приложения?


person TheJediCowboy    schedule 05.11.2013    source источник


Ответы (2)


не отвечая прямо на вопрос: Как я могу гарантировать, что для службы будет создан только один домен приложения?,

Как насчет того, чтобы полностью отделить этот ваш «одиночный» компонент от отдельного процесса, вне IIS, скажем, в качестве службы Windows, и использовать его службы через привязку WCF-Named-Pipe? Я использовал named-pipe+WCF+win-service и обнаружил, что коммуникационная структура сильно оптимизирована для повышения производительности. вся стоимость оперативной памяти/процессора связана с кодом, работающим в методах службы singleton.

Конечно, если singleton-service-provider должен быть объединен в памяти с фактическим сервисным кодом, это может стать проблемой. еще идея.

person inquisitive    schedule 05.11.2013

Если вы говорите о коде, возможно, стоит поискать решения Jon Skeets Singleton здесь

Однако, если вы запускаете несколько экземпляров всей программы, у вас нет другого выбора, кроме как извлечь ваши одноэлементные вызовы в службу Windows, веб-службу или вызов базы данных.

person SamuelKDavis    schedule 11.11.2013