RequiresQuestionAndAnswer имеет значение false в web.config, но RequiresQuestionAndAnswer имеет значение true во время выполнения

В веб-приложении ASP.net я определил следующего поставщика членства в файле web.config:

<membership>
  <providers>
    <add connectionStringName="MyServer" name="MyServer" type="System.Web.Security.SqlMembershipProvider" 
      enablePasswordReset="true" 
      requiresQuestionAndAnswer="false" 
      enablePasswordRetrieval="false" />
  </providers>
</membership>

Когда я запускаю приложение в отладчике, свойство Membership.Provider.RequiresQuestionAndAnswer равно true.

Почему? И как я могу это исправить?

Обновление: Ar tuntime, коллекция Membership.Providers содержит два почти идентичных экземпляра Provider. Отличия заключаются в следующем:

  • Первый поставщик имеет Name == "AspNetSqlMembershipProvider" и RequiresQuestionAndAnswer == true.
  • Второй поставщик имеет Name == "MyServer" и RequiresQuestionAndAnswer == false.

Теперь пытаемся выяснить, откуда взялся первый.


person urig    schedule 26.05.2015    source источник
comment
Соответствует ли имя поставщика в отладчике имени вашего поставщика (MyServer)?   -  person Meidan Alon    schedule 28.05.2015
comment
@MeidanAlon имя поставщика в отладчике кажется AspNetSqlMembershipProvider. В то же время он показывает правильную строку подключения SQL, поэтому кажется, что она правильная.   -  person urig    schedule 28.05.2015
comment
Это странно, я бы попробовал добавить defaultProvider = MyServer внутри членства и ‹clear /› в ‹providers›   -  person Meidan Alon    schedule 28.05.2015
comment
@MeidanAlon Добавление ‹clear /› перед ‹add› вызывает исключение ConfigurationErrorsException. Установка defaultProvider = MyServer на ‹membership› сделала свое дело. Спасибо. Хотели бы вы опубликовать это в качестве ответа? Также - остается вопрос, почему существует два экземпляра Provider.   -  person urig    schedule 28.05.2015


Ответы (2)


Согласно последующему вопросу, поставщики тайны определены в конфигурационном файле нижнего уровня с именем machine.config, который является общесерверным родительским конфигурационным файлом для всех сайтов asp.net, работающих на машине. Дополнительные сведения см. На странице MSDN для asp. net config иерархию.

person Ken Egozi    schedule 31.05.2015

Исправление моей проблемы - указать в web.config:

<membership defaultProvider="MyServer>

Причина, по которой существует «лишний» поставщик во время выполнения, заключается в том, что он определен в моем файле machine.config. Вот как найти свой.

Кредит на исправление принадлежит @ meidan-alon, а кредит за основную причину - @ ken-egozi :)

person urig    schedule 30.05.2015