Каков жизненный цикл службы WCF (http) WCF?
У меня есть установка контейнера инъекций зависимостей в моем приложении, и я думаю, что создание контейнера каждый раз, когда запрос службы WCF приходит, будет неэффективным.
Может ли кто-нибудь объяснить мне, что для службы WCF, использующей http/IIS, какой жизненный цикл службы? Если я смогу понять это, я смогу принять обоснованное решение о том, где контейнер должен храниться, создаваться, уничтожаться и т.д.
Ответы
Ответ 1
Если ваш InstanceContextMode
PerCall, класс обслуживания будет создан с нуля для каждого входящего запроса, а затем удаляется, когда это будет сделано.
Если ваш InstanceContextMode
PerSession, класс службы будет создан и использован для обслуживания одного из указанных клиентов в течение всего сеанса (или до появления "InactivityTimeout" или ошибки имеет место).
Если ваш InstanceContextMode
Одиночный (singleton), класс обслуживания будет создан, когда первый запрос будет включен и останется в памяти, пока запросы продолжают поступать, пока нет возникает ошибка, и не достигается никакое действие бездействия.
Итак, вот оно! Конечно, режим concurrency (для сервисов PerSession
и Single
) также войдет в игру, чтобы сделать вещи чуть более "интересными"
Ответ 2
Как вы упомянули, что вы пытались интегрировать экземпляр службы WCF с контейнером для инъекций зависимостей, я бы просто хотел сказать, что у меня был очень положительный опыт использования Замок WCF Integration Facility, чтобы сделать именно это.
Он специфичен для контейнера инъекций зависимостей Castle Windsor, но с его открытым исходным кодом вы можете заглянуть внутрь и понять некоторые проблемы и решения при условии,.
Ответ 3
Это зависит от вашего ServiceBehavour.
В частности this и this.