Один или несколько доменов приложений созданы на стороне сервера, когда несколько клиентов вызывают службу WCF?
Вопрос в значительной степени в названии, но я уточню.
У меня есть приложение Silverlight, которое действует как слегка расширенный пользовательский интерфейс.
Основная часть моей программы будет работать на сервере для обеспечения согласованности общей базы данных.
Вот где возникает мой вопрос: получат ли два клиента, вызывающих службу WCF, поток внутри этой службы ИЛИ получат ли они полный AppDomain?
Разница в том, что в первом случае они могут легко делиться БД, но во втором случае - нет, насколько я понимаю.
РЕДАКТИРОВАТЬ: Это потому, что БД использует шаблон Identity Map [Fowler], где используемые объекты сохраняются в физической памяти (статическая синглтонная переменная) - несколько доменов приложений могут испортить это.
(Я спросил своего университетского преподавателя и довольно долго искал, прежде чем задать этот, казалось бы, простой вопрос)
1 ответ
Модель потоков для служб WCF определяется режимом ConcurrencyMode, который вы настраиваете для своей службы: http://msdn.microsoft.com/en-us/library/system.servicemodel.concurrencymode.aspx.
Относительно доменов приложений - это полностью зависит от того, как вы размещаете свой сервис. Если вы запускаете собственный ServiceHost, вручную, всегда будет ровно 1 AppDomain на стороне сервера, если вы не решите начать управлять и раскручивать свой собственный.
Если вы размещаете внутри IIS... это зависит от IIS, как он обрабатывает запросы. Он может повторно использовать 1 домен приложений, он может раскручивать несколько доменов приложений (если вы не переопределите параметр в web.config, чтобы разрешить только 1 домен приложений на рабочий процесс), или он может ускорить несколько физических рабочих процессов (что по сути подразумевает несколько доменов приложений), если у вас включен режим веб-сада.
Все это говорит, я не уверен точно, почему это повлияет на вашу стратегию доступа к данным. Несколько потоков или доменов приложений не должны иметь проблем с совместным использованием БД.