IIS7 是否使用不同的默认成员资格提供程序?
假设我创建CreateUserWizard控件并使用AspNetSqlMembershipProvider(在machine.config中定义)作为默认成员资格提供程序。 假设我将默认提供程序的 requiresQuestionAndAnswer 属性更改为 false,则不应要求 CreateUserWizard 控件模板提供 Question 和答案字段。 但是,如果我通过 IIS7 请求该页面,则会出现以下异常:
CreateUserWizard1:CreateUserWizardStep.ContentTemplate 不包含带有 ID 问题的安全问题的 IEditableTextControl,如果您的会员提供商需要问题和答案,则这是必需的。
A) 上述异常表明,当通过IIS7请求页面时,运行时不使用AspNetSqlMembershipProvider(在machine.config中定义)作为默认提供商?! 如果是真的,那这是为什么呢?
B) 我在哪里可以找到IIS7默认提供程序的定义?
thanx
编辑:
这是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。 因此,我操作了位于 C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG 内的 machine.config
Say I create CreateUserWizard control and use AspNetSqlMembershipProvider (defined in machine.config) as a default membership provider. Assuming I change default provider's requiresQuestionAndAnswer attribute to false, then CreateUserWizard control template should not be required to provide Question and Answer fields. But if I request the page via IIS7 I get the following exception:
CreateUserWizard1: CreateUserWizardStep.ContentTemplate does not contain an IEditableTextControl with ID Question for the security question, this is required if your membership provider requires a question and answer.
A) The above exception suggests that when requesting a page via IIS7, runtime doesn’t use AspNetSqlMembershipProvider (defined in machine.config)as a default provider?! If true, then why is that?
B) And where can I find the definition for IIS7’s default provider?
thanx
EDIT:
Here is <Membership>
element in machine.config file:
<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>
Are you changing the
machine.config
for the correct version of runtime?
I'm not sure what you mean by that. I'm running Asp.Net 3.5, which I think uses Asp.Net engine version 2.0.50727. Thus I manipulated machine.config located inside C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
IIS7 使用自己的配置文件,位于
%windir%\System32\inetsrv\config\applicationHost.config
。 但是,此文件处理 IIS7 特定配置(例如
),而不是
内容。 我相信这些仍然是从machine.config
和web.config
文件中读取的。 事实上,在我的计算机上,AspNetSqlMembershipProvider
的requiresQuestionAndAnswer
的默认值(在machine.config
中指定)为true
。更新:
在 64 位操作系统下,.NET 应用程序可以在 WOW64 模式下在 32 位 CLR 上运行,也可以在 x64 模式下本机运行。 每个 .NET 框架实例都有自己的一组配置文件,并忽略所有其他配置文件。
64 位操作系统上的 IIS7 默认以 64 位模式运行应用程序。 但是,您可以将应用程序池设置为作为 32 位 WOW64 进程运行(
enable32BitAppOnWin64
,您可以在 IIS7 管理器中的应用程序池的“高级设置”对话框中进行设置)。 如果您这样做,显然它将使用 32 位machine.config
中的设置。 VS Web 服务器使用 32 位machine.config
的原因正是这样:它作为 WOW64 进程运行。IIS7 uses its own configuration file located at
%windir%\System32\inetsrv\config\applicationHost.config
. However, this file deals with IIS7 specific configuration (e.g.<system.webServer>
) and not<system.web>
stuff. I believe those are still read frommachine.config
andweb.config
files. Indeed, the default value (specified inmachine.config
) forrequiresQuestionAndAnswer
for theAspNetSqlMembershipProvider
istrue
on my machine.UPDATE:
Under a 64 bit OS, a .NET application can either run on a 32 bit CLR in WOW64 mode or natively run under x64 mode. Each .NET framework instance has its own set of config files and ignores all other configuration files.
IIS7 on a 64 bit OS runs applications in 64 bit mode by default. You can, however, set an application pool to run as a 32 bit WOW64 process (
enable32BitAppOnWin64
, which you can set in Advanced Settings dialog for an application pool in IIS7 manager). If you do that, obviously it'll use settings from 32 bitmachine.config
. The reason VS Web server uses 32 bitmachine.config
is exactly this: it runs as a WOW64 process.您到底在哪里对“requiresQuestionAndAnswer”进行了更改? 如果它位于 machine.config 上,IIS 应该尊重这一点。
Where exactly did you make the change on "requiresQuestionAndAnswer"? If it is on machine.config, IIS should honor that.
您在
提供程序中添加了requiresQuestionAndAnswer="false"
,您还应该在
提供程序中更改它,只需添加
元素并在其提供程序上设置requiresQuestionAndAnswer="false"
You added
requiresQuestionAndAnswer="false"
in the<membership>
provider, you should also change it in the<profile>
one, just add the<profile>
element and setrequiresQuestionAndAnswer="false"
on its provider