Per-Call / Singleton Гибридное решение для WCF

1

У меня есть некоторые компоненты моей службы WCF, которые я хочу использовать; однако я хочу, чтобы служба запускалась на основе сеанса (в случае, если один сеанс создает исключение, которое прерывает его для остальных абонентов)

Сейчас мой контракт на обслуживание настроен так:

[ServiceBehavior(
    ConcurrencyMode = ConcurrencyMode.Multiple,
    InstanceContextMode = InstanceContextMode.Single
)]

Если у меня есть потокобезопасные одноэлементные компоненты, такие как Loggers, которые я хочу использовать для всех сеансов; как я могу сделать WCF, который не является единственным экземпляром в начале (за сеанс предпочтительно), но имеет внутренние компоненты, которые являются одиночными экземплярами (например, ведение журнала, доступ к данным и т.д.).

Теги:
session
web-services
wcf

1 ответ

0
Лучший ответ

если вы уже используете какую-либо инфраструктуру инъекций зависимостей - пусть она контролирует время жизни объекта для вас. Зарегистрируйте регистратор и объекты доступа к базе данных с единичной областью действия экземпляра и разрешите в своей службе wcf при каждом вызове - каждый раз вы получите один и тот же экземпляр.

Если вы контролируете время жизни своих объектов вручную - создавайте логгеров и объекты доступа к базам данных как одиночные (или создавайте родительскую однопользовательскую службу) и получаете доступ к своему экземпляру в службе wcf. В этом случае будьте осторожны, чтобы избежать опрокидывания устройства обслуживания.

Сама служба WCF в обоих случаях может быть настроена как InstanceContextMode.PerCall или PerSession.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню