2016-11-07 2 views
0

У меня есть класс в моей службе WCF, который использует ServiceSecurityContext.Current.WindowsIdentity для получения идентификатора клиента. Все это хорошо работает. Я хотел бы иметь класс как singleton, поэтому я могу получить к нему доступ в любом месте, не создавая новые экземпляры повторно. Используемый мной InstanceContextMode является PerSession и ConcurrencyMode является Single.Создайте одноэлементный класс для доступа к ServiceSecurityContext.Current.WindowsIdentity

Как я могу это сделать, и должен ли я беспокоиться о каких-либо ошибках? Кстати, класс использует олицетворение и загружает информацию из базы данных для входа в домен и кэширует ее на время работы WCF.

ответ

0

WCF автоматически создаст синглтона со следующим:

InstanceContextMode = InstanceContextMode.Single 

Single: один InstanceContext (и, следовательно, объект службы) обрабатывает все запросы клиентов для жизни приложения.

ConcurrencyMode = ConcurrencyMode.Multiple 

ConcurrencyMode.Multiple будет поддерживать более одного одновременного пользователя.

Подробнее об этом материале здесь:

https://msdn.microsoft.com/en-us/library/ms731193(v=vs.110).aspx

Из моего опыта, реализующие одиночек следует избегать, поскольку могут возникнуть проблемы производительности, особенно если они не многопоточный. Даже если вы используете ConcurrencyMode.Multiple - нет гарантии синхронизации потоков (вы должны сами справиться с этим).

Подробнее о Synchronizing Data for Multithreading

+0

Мой вопрос был не о InstanceContextMode или ConcurrencyMode. Я полностью их понимаю. Почему это вызовет проблемы с производительностью и почему, особенно если не многопоточность? Я не согласен с вами, если вы не просветите меня. – CodingYoshi

+0

Значения настроек в вашем сообщении не поддерживают одиночный сингл WCF. Следовательно, мой ответ о наличии правильных значений настроек, а также о возможном получении с синхронизацией потоков. –

Смежные вопросы