Скажем, я создаю элемент управления CreateUserWizard и использую AspNetSqlMembershipProvider (определенный в machine.config) как поставщик членства по умолчанию. Предполагая, что я меняю поставщик по умолчанию, для атрибутаQuestionAndAnswer требуется false, тогда шаблон шаблона CreateUserWizard не должен содержать поля "Вопросы и ответы". Но если я запрашиваю страницу через IIS7, я получаю следующее исключение:
CreateUserWizard1: CreateUserWizardStep.ContentTemplate не содержит IEditableTextControl с идентификационным вопросом для вопроса безопасности, это требуется, если ваш поставщик членства требует ответа на вопрос.
A) Вышеупомянутое исключение указывает, что при запросе страницы через IIS7 среда выполнения не использует AspNetSqlMembershipProvider (определенную в machine.config) как поставщик по умолчанию?! Если это так, то почему?
B) И где я могу найти определение для поставщика услуг IIS7 по умолчанию?
спасибо
EDIT:
Вот элемент <Membership>
в файле machine.config:
<membership>
<providers>
<add name="AspNetSqlMembershipProvider"
type="System.Web.Security.SqlMembershipProvider, System.Web,Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
connectionStringName="LocalSqlServer"
enablePassswordRetrieval="false"
requiresQuestionAndAnswer="false"
applicationName="/" requiresUniqueEmail="false"
passwordFormat="Hashed" maxInvalidPasswordAttempts="5"
minRequiredPasswordLength="7"
minRequiredNonalphanumericCharacters="0"
passwordAttemptWindow="10"
passwordStrengthRegularExpression=""/>
</providers>
</membership>
Вы меняете
machine.config
для правильной версии среды выполнения?
Я не уверен, что вы подразумеваете под этим. Я запускаю Asp.Net 3.5, который, я думаю, использует версию Asp.Net версии 2.0.50727. Таким образом, я манипулировал machine.config, находящимся внутри C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG
IIS7 использует собственный файл конфигурации, расположенный в %windir%\System32\inetsrv\config\applicationHost.config
. Однако этот файл имеет специфическую конфигурацию IIS7 (например, <system.webServer>
), а не <system.web>
. Я считаю, что они все еще читаются из файлов machine.config
и web.config
. Действительно, значение по умолчанию (указанное в machine.config
) для requiresQuestionAndAnswer
для AspNetSqlMembershipProvider
равно true
на моей машине.
UPDATE:
В 64-разрядной ОС приложение .NET может либо работать на 32-битной CLR в режиме WOW64, либо изначально запускаться в режиме x64. Каждый экземпляр .NET Framework имеет свой собственный набор файлов конфигурации и игнорирует все другие файлы конфигурации.
IIS7 на 64-битной ОС по умолчанию запускает приложения в режиме 64 бит. Однако вы можете установить пул приложений для запуска в виде 32-битного WOW64-процесса (enable32BitAppOnWin64
, который вы можете установить в диалоговом окне "Дополнительные параметры" для пула приложений в диспетчере IIS7). Если вы это сделаете, очевидно, что он будет использовать настройки из 32 бит machine.config
. Причина, по которой VS Web-сервер использует 32-разрядный machine.config
, заключается именно в этом: он работает как процесс WOW64.
Вы добавили requiresQuestionAndAnswer="false"
в провайдер <membership>
, вы также должны изменить его в <profile>
, просто добавьте элемент <profile>
и установите requiresQuestionAndAnswer="false"
у своего провайдера
Где именно вы вносили изменения в "requireQuestionAndAnswer"? Если он находится на machine.config, IIS должен соблюдать это.
machine.config
для правильной версии среды выполнения?