хорошие ответы, но я думаю, что есть проблема в оригинальном вопросе. «Типичное использование» технологии - плохо сформулированный вопрос. Ни у кого нет «типичного» сценария, и вам следует пересмотреть требования вашей конкретной проблемы, прежде чем принимать решение о реализации или подходе. Ваши требования должны сообщить ваше решение.
Например, Singletons [то есть шаблон Singleton] - это просто еще один инструмент в нашей коробке, и, как и любой инструмент, есть случаи, когда он работает, а другие - нет. В частности, если вам нужно централизовать бизнес-логику [более применимую в автономном приложении, чем удаленная служба WCF], или совместно использовать память или ресурс, Singleton работает хорошо. Конечно, если вы делитесь бизнес-логикой, состояние поддерживается в стеке вызовов, а многопоточность спорна. Если совместное использование памяти между вызовами потребителя, то многопоточность является проблемой. Что касается WCF, существует два режима (на самом деле три, но третий является частным случаем первого) поведения многопоточности, которое вы можете указать,
// we are specifying that this service implementation is single-threaded
// and WCF should permit *at most* one call at a time. Any requests made
// simultaneously/concurrently are queued.
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single)]
public class SingleThreadedNonThreadSafeService : IService { ... }
и
// we are specifying that this service implementation is multi-threaded
// and [hopefully!] thread-safe. WCF should permit any number of threads,
// or any number of simultaneous concurrent calls.
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple)]
public class MultiThreadedThreadSafeService : IService { ... }
XML-комментарии для ConcurrencyMode
в основном говорят то же самое, что и выше.
Если вам НЕ не нужно делиться бизнес-логикой или памятью между потребителями, то НЕ использует Singleton, "модель" НЕ подходит проблема. Это все равно, что надевать мачеху на ногу сводной сестры! И никто никогда не должен видеть это.
И наоборот, если между вызовами нет общего состояния, разместите экземпляр для вызова \ сеанса.