Изменение Membership.ApplicationName в коде - безопасность потока - PullRequest
0 голосов
/ 05 декабря 2010

На странице MSDN для свойства Membership.ApplicationName (которое применяется к поставщику членства asp.net), он предупреждает, что, хотя можно изменить Membership.ApplicationName в коде, «свойство ApplicationName не является Потокобезопасен для нескольких записей, а изменение значения свойства ApplicationName может привести к неожиданному поведению для нескольких пользователей приложения. ' Поэтому они рекомендуют избегать использования его для «веб-приложения».

Это потому, что значение по умолчанию SqlMembershipProvider написано как одиночный. Но вот мой вопрос: нормально ли, если все потоки в моем процессе приложения будут устанавливать Membership.ApplicationName в то же самое ?

Я подумываю о том, чтобы на моем компьютере IIS было несколько приложений, у каждого из которых был свой отдельный пул приложений. Я хочу указать им одно и то же местоположение, но в зависимости от имени хоста установить провайдер приложения на разные вещи. Разве это не будет на самом деле хорошо? Это может быть не поточно-ориентированная операция, но разве у каждого пула приложений нет собственного процесса и, следовательно, собственного экземпляра SqlMembershipProvider? Таким образом, каждый поток, который пытался установить Membership.ApplicationName для данного экземпляра SqlMembershipProvider, будет пытаться установить для него одно и то же (поставщик, который подходит для этого имени хоста). Или я что-то упустил?

Полагаю, главный вопрос в том, разделяют ли ВСЕ приложения asp.net один SqlMembershipProvider или для каждого процесса пула приложений создается отдельное?

1 Ответ

1 голос
/ 05 декабря 2010

Каждый пул приложений будет иметь свой собственный MemberShip.ApplicationName, поэтому вы будете в безопасности.

В отношении поставщика членства в SQL будет применяться то же самое.Поскольку каждый сайт находится в своем собственном пуле приложений, они отличаются друг от друга.

На самом деле даже в том же пуле приложений, но там, где у вас были отдельные приложения ASP.NET (т. Е. Вы щелкнули по Создать приложение в папке дляу каждого из них) были бы разные объекты.Это связано с тем, что единицей изоляции приложений в .NET является Application Domain , который можно описать как мягкую границу процесса в процессе Windows.

Чтобы ответить на вопрос в вашем комментарии, эта страница в руководствах по быстрому запуску MS ASP.NET, вероятно, объясняет это и прямо из уст лошадей:

Понимание приложений иСостояние

Цитата:

Каждое приложение ASP.NET Framework на веб-сервере выполняется в уникальном домене приложения .NET Framework, что гарантирует изоляцию класса(без конфликтов версий и имен), изолированная программная среда безопасности (предотвращающая доступ к определенным компьютерам или сетевым ресурсам) и изоляция статических переменных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...