Роли.CreateRole() создает новую базу данных внутри App_Data

#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 Я, хорошая идея, я постараюсь изменить свой ответ, чтобы лучше объяснить (надеюсь) полезность этой ссылки. Спасибо за совет!