在配置使用Membership或其他的Providers的ASP.NET2.0时一定要设置applicationName属性
2007-01-09 12:02
495 查看
在配置使用Membership或其他的Providers的ASP.NET2.0时一定要设置applicationName属性
原文:Always set the "applicationName" property when configuring ASP.NET 2.0 Membership and other Providers
作者:Scott Guthrie
翻译:范维肖
注释:对于个别名词保留英文描述或翻译参考。
场景:
在本地开发一个asp.net2.0的应用程序时使用了Membership、Roles或Profile特性。你创建了一些新用户,一切都没有问题。
然后把这个程序copy到远程服务器(remote server)上(或者只是移动到你本地服务器上的其他目录)然后运行。由于某种原因,虽然我们能够连接到membership数据库,但是当登陆的时候就会出现错误了,它并不抛出连接错误(connection error),而是提示你像类似的错误:“尝试登陆失败,请重试”(Login attempt unsuccessful, please try again)
原因:
这种经常出现的错误的原因是因为membership(或者是roles、profile) provider已经被加入到了程序的web.config里了。但是applicationName属性(attribute)并没有被指定(假设下面的代码的粗体部分布存在地话)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
<membership>
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
<providers>
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
<clear/>
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
<add name="AspNetSqlMembershipProvider"
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
connectionStringName="LocalSqlServer"
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
enablePasswordRetrieval="false"
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
enablePasswordReset="true"
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
requiresQuestionAndAnswer="true"
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
requiresUniqueEmail="false"
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
passwordFormat="Hashed"
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
maxInvalidPasswordAttempts="5"
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
minRequiredPasswordLength="7"
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
minRequiredNonalphanumericCharacters="1"
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
passwordAttemptWindow="10"
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
passwordStrengthRegularExpression=""
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
applicationName="/"
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
</providers>
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
</membership>/>
如果applicationName属性没有被配置的话,当往程序的数据库里添加数据的时候,asp.net会使用程序在web服务器里的虚拟目录路径(vroot Path)自动的计算applicationName的值。我们打开aspnetdb数据库,看aspnet_Applications表,就能了解这一行为:
![](http://static.flickr.com/56/133982926_dbbe4500f4.jpg)
![](http://static.flickr.com/50/133982945_b845d57f96_o.png)
这个表里为每个applicationName存储了一个具有唯一值(unique)的ApplicationID。因为在我们的程序里注册一个用户的时候并没有指定一个applicationName属性,所以它自动的被设置(计算)为/website8(早期建立项目时的名字)
然后,使用membership API创建的用户会与ApplicationID相关联,这样可以找到applicationName(and in turn the applicationName)。【这样做的目的可以让我们的多个应用程序和站点使用同一个数据库】。打开aspnet_Users表就可以可以看到这些。
![](http://static.flickr.com/54/133982952_40da372e79.jpg)
![](http://static.flickr.com/55/133982961_03584ad71b_o.png)
如果把这个程序配置成运行在/website8虚拟目录下那么一切都没有问题。但是如果它被copy到其他的地方或服务器上并且更换了虚拟路径(比如说“/app1”或更通常被设置的“/”)后,当Membership APIs被使用时他们就“看”不到数据库里已有的用户了——因为他们将会使用一个不同的applicationName去数据库里寻找用户,相应地过滤application_Users表中的用户。这就是为什么会出现上面错误的原因。
如何解决这个问题:
最简单的办法是打开ASPNETDB数据库中的aspnet_Users和aspnet_Application表,去“回想”(figure out,因为那时候我们的虚拟目录叫什么名字我们恐怕已经忘了)创建用户和其他数据的时候的程序名称(去aspnet_Application表中查找)
然后打开你的web.config文件,添加一个applicationName属性到provider声明的地方并且给他赋值,例如,下面的代码我们把它设置为在aspnet_Application表存在的/website8:
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
<membership>
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
<providers>
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
<clear/>
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
<add name="AspNetSqlMembershipProvider"
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
connectionStringName="LocalSqlServer"
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
enablePasswordRetrieval="false"
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
enablePasswordReset="true"
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
requiresQuestionAndAnswer="true"
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
requiresUniqueEmail="false"
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
passwordFormat="Hashed"
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
maxInvalidPasswordAttempts="5"
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
minRequiredPasswordLength="7"
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
minRequiredNonalphanumericCharacters="1"
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
passwordAttemptWindow="10"
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
passwordStrengthRegularExpression=""
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
applicationName="/website8"
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
/>
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
</providers>
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
</membership>
这样程序就能正常的工作,无论我们部署这个程序到那个虚拟目录。
当然,我们还要保证Roles、Profile、WebPartPersonalization或其他的我们配置的providers也要被配置了。
这样我们的程序可以正常工作了。
如果在一开始就避免它:
避免这个问题的最好的办法是始终设置applicationName的值。一个比较好的默认值是使用“/”。
原文:Always set the "applicationName" property when configuring ASP.NET 2.0 Membership and other Providers
作者:Scott Guthrie
翻译:范维肖
注释:对于个别名词保留英文描述或翻译参考。
场景:
在本地开发一个asp.net2.0的应用程序时使用了Membership、Roles或Profile特性。你创建了一些新用户,一切都没有问题。
然后把这个程序copy到远程服务器(remote server)上(或者只是移动到你本地服务器上的其他目录)然后运行。由于某种原因,虽然我们能够连接到membership数据库,但是当登陆的时候就会出现错误了,它并不抛出连接错误(connection error),而是提示你像类似的错误:“尝试登陆失败,请重试”(Login attempt unsuccessful, please try again)
原因:
这种经常出现的错误的原因是因为membership(或者是roles、profile) provider已经被加入到了程序的web.config里了。但是applicationName属性(attribute)并没有被指定(假设下面的代码的粗体部分布存在地话)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
<membership>
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
<providers>
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
<clear/>
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
<add name="AspNetSqlMembershipProvider"
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
connectionStringName="LocalSqlServer"
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
enablePasswordRetrieval="false"
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
enablePasswordReset="true"
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
requiresQuestionAndAnswer="true"
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
requiresUniqueEmail="false"
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
passwordFormat="Hashed"
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
maxInvalidPasswordAttempts="5"
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
minRequiredPasswordLength="7"
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
minRequiredNonalphanumericCharacters="1"
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
passwordAttemptWindow="10"
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
passwordStrengthRegularExpression=""
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
applicationName="/"
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
</providers>
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
</membership>/>
如果applicationName属性没有被配置的话,当往程序的数据库里添加数据的时候,asp.net会使用程序在web服务器里的虚拟目录路径(vroot Path)自动的计算applicationName的值。我们打开aspnetdb数据库,看aspnet_Applications表,就能了解这一行为:
![](http://static.flickr.com/56/133982926_dbbe4500f4.jpg)
![](http://static.flickr.com/50/133982945_b845d57f96_o.png)
这个表里为每个applicationName存储了一个具有唯一值(unique)的ApplicationID。因为在我们的程序里注册一个用户的时候并没有指定一个applicationName属性,所以它自动的被设置(计算)为/website8(早期建立项目时的名字)
然后,使用membership API创建的用户会与ApplicationID相关联,这样可以找到applicationName(and in turn the applicationName)。【这样做的目的可以让我们的多个应用程序和站点使用同一个数据库】。打开aspnet_Users表就可以可以看到这些。
![](http://static.flickr.com/54/133982952_40da372e79.jpg)
![](http://static.flickr.com/55/133982961_03584ad71b_o.png)
如果把这个程序配置成运行在/website8虚拟目录下那么一切都没有问题。但是如果它被copy到其他的地方或服务器上并且更换了虚拟路径(比如说“/app1”或更通常被设置的“/”)后,当Membership APIs被使用时他们就“看”不到数据库里已有的用户了——因为他们将会使用一个不同的applicationName去数据库里寻找用户,相应地过滤application_Users表中的用户。这就是为什么会出现上面错误的原因。
如何解决这个问题:
最简单的办法是打开ASPNETDB数据库中的aspnet_Users和aspnet_Application表,去“回想”(figure out,因为那时候我们的虚拟目录叫什么名字我们恐怕已经忘了)创建用户和其他数据的时候的程序名称(去aspnet_Application表中查找)
然后打开你的web.config文件,添加一个applicationName属性到provider声明的地方并且给他赋值,例如,下面的代码我们把它设置为在aspnet_Application表存在的/website8:
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
<membership>
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
<providers>
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
<clear/>
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
<add name="AspNetSqlMembershipProvider"
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
connectionStringName="LocalSqlServer"
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
enablePasswordRetrieval="false"
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
enablePasswordReset="true"
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
requiresQuestionAndAnswer="true"
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
requiresUniqueEmail="false"
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
passwordFormat="Hashed"
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
maxInvalidPasswordAttempts="5"
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
minRequiredPasswordLength="7"
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
minRequiredNonalphanumericCharacters="1"
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
passwordAttemptWindow="10"
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
passwordStrengthRegularExpression=""
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
applicationName="/website8"
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
/>
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
</providers>
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030171/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
</membership>
这样程序就能正常的工作,无论我们部署这个程序到那个虚拟目录。
当然,我们还要保证Roles、Profile、WebPartPersonalization或其他的我们配置的providers也要被配置了。
这样我们的程序可以正常工作了。
如果在一开始就避免它:
避免这个问题的最好的办法是始终设置applicationName的值。一个比较好的默认值是使用“/”。
相关文章推荐
- 【转】在配置使用Membership或其他的Providers的ASP.NET2.0时一定要设置applicationName属性。
- 在配置使用Membership或其他的Providers的ASP.NET2.0时一定要设置applicationName属性
- 在配置使用Membership或其他的Providers的ASP.NET2.0时一定要设置applicationName属性
- 在配置使用Membership或其他的Providers的ASP.NET2.0时一定要设置applicationName属性
- 使用Membership或其他的Providers的ASP.NET2.0时一定要设置application
- [导入]在配置使用Membership或其他的Provid...
- asp.net2.0 登录控件使用(membership) 的环境配置及使用
- asp.net2.0 登录控件使用(membership) 的环境配置及使用
- 使用.Net图表开发工具JDash.Net设置SQL Server Providers
- 导出Excel之Epplus使用教程4(其他设置)
- ASP.NET2.0(C#)Membership和Profile系列1-数据库的设置
- IIS7错误:不能在此路径中使用此配置节。如果在父级别上锁定了该节,便会出现这种情况。锁定是默认设置的(overrideModeDefault="Deny")......
- 编写程序配置、设置界面,你还在用listview吗,还在使用自定义dialog吗?
- Road of Big Data(2)----Linux简单设置和远程工具配置及使用
- 处理SPS错误:只有在配置文件或 Page 指令中将启用会话状态设置为真时,才可以使用会话状态
- 关于SourceTree使用svn配置和设置
- java IO 使用Properties设置键值对配置信息 写入文件和从文件中读取
- php error_log记录日志的使用方法和配置 (日志目录一定要手动创建)
- 使用APMServ服务配置如何进行Wordpress本地伪静态设置
- 使用Struts2上传时,一定要设置 文件上传大小限制。