#asp.net #asp.net-membership #roles #membership-provider
#asp.net #asp.net-членство #роли #членство-поставщик
Вопрос:
Что может быть причиной Roles.CreateRole("admin")
создания новой локальной базы данных внутри App_Data
, если мой поставщик членства по умолчанию настроен на использование подключения к реальному серверу SQL?
У меня есть строка подключения, подобная этой:
<connectionStrings>
<add name="MembershipDbConnection"
connectionString="Server=.;Initial Catalog=aspnetdb;User Id=*;Password=*" />
</connectionStrings>
и поставщик членства определяется следующим образом:
<membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="15">
<providers>
<clear />
<add
name="SqlProvider"
type="System.Web.Security.SqlMembershipProvider"
connectionStringName="MembershipDbConnection" <-- this is the connection
/>
</providers>
</membership>
Странно то, что aspnetdb
на моем SQL Server есть база данных (заполненная таблицами), и если я использую Membership.GetAllUsers()
, я получаю пользователей в этой таблице без проблем. Вход в систему также работает должным образом. Но Roles.CreateRole
создает новую базу данных.
Ответ №1:
Вам необходимо настроить раздел диспетчера ролей, если вы хотите использовать роли. Вероятно, вы используете унаследованный раздел RoleManager, который использует другую строку подключения.
Комментарии:
1. 1 Спасибо. Была строка
<roleManager enabled="true" />
, в которой явно не указан поставщик.
Ответ №2:
Я думаю, что вы не указали атрибут «ApplicationName» в тегах «membership» и «RoleManager» в Web.Config. Вот пример: —
<membership>
<providers>
<clear />
<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="MembershipDbConnection" applicationName="/" />
</providers>
</membership>
<roleManager enabled="true">
<providers>
<clear />
<add connectionStringName="MembershipDbConnection" applicationName="/" name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" />
<add applicationName="/" name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" />
</providers>
</roleManager>
Ответ №3:
Ответ Мансура Джи дает отличный шаблон для подражания. Вот ссылка на документацию о том, что и как должно быть реализовано в web.config для включения RoleManager:
http://msdn.microsoft.com/en-us/library/vstudio/ms164660 (v = против 100).aspx
Надеюсь, это добавит некоторый контекст для будущих читателей, так как мне это было нужно, когда я впервые наткнулся на этот ответ.
Комментарии:
1. Хотя эта ссылка может дать ответ на вопрос, лучше включить сюда основные части ответа и предоставить ссылку для справки. Ответы только для ссылок могут стать недействительными, если связанная страница изменится.
2. @Sam Я, хорошая идея, я постараюсь изменить свой ответ, чтобы лучше объяснить (надеюсь) полезность этой ссылки. Спасибо за совет!