在配置使用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)并没有被指定(假设下面的代码的粗体部分布存在地话)
如果applicationName属性没有被配置的话,当往程序的数据库里添加数据的时候,asp.net会使用程序在web服务器里的虚拟目录路径(vroot Path)自动的计算applicationName的值。我们打开aspnetdb数据库,看aspnet_Applications表,就能了解这一行为:
这个表里为每个applicationName存储了一个具有唯一值(unique)的ApplicationID。因为在我们的程序里注册一个用户的时候并没有指定一个applicationName属性,所以它自动的被设置(计算)为/website8(早期建立项目时的名字
如果applicationName属性没有被配置的话,当往程序的数据库里添加数据的时候,asp.net会使用程序在web服务器里的虚拟目录路径(vroot Path)自动的计算applicationName的值。我们打开aspnetdb数据库,看aspnet_Applications表,就能了解这一行为:
这个表里为每个applicationName存储了一个具有唯一值(unique)的ApplicationID。因为在我们的程序里注册一个用户的时候并没有指定一个applicationName属性,所以它自动的被设置(计算)为/website8(早期建立项目时的名字)
然后,使用membership API创建的用户会与ApplicationID相关联,这样可以找到applicationName(and in turn the applicationName)。【这样做的目的可以让我们的多个应用程序和站点使用同一个数据库】。打开aspnet_Users表就可以可以看到这些。
如果把这个程序配置成运行在/website8虚拟目录下那么一切都没有问题。但是如果它被copy到其他的地方或服务器上并且更换了虚拟路径(比如说“/app1”或更通常被设置的“/”)后,当Membership APIs被使用时他们就“看”不到数据库里已有的用户了——因为他们将会使用一个不同的applicationName去数据库里寻找用户,相应地过滤application_Users表中的用户。这就是为什么会出现上面错误的原因。
如何解决这个问题:
最简单的办法是打开ASPNETDB数据库中的aspnet_Users和aspnet_Application表,去“回想”(figure out,因为那时候我们的虚拟目录叫什么名字我们恐怕已经忘了)创建用户和其他数据的时候的程序名称(去aspnet_Application表中查找)
然后打开你的web.config文件,添加一个applicationName属性到provider声明的地方并且给他赋值,例如,下面的代码我们把它设置为在aspnet_Application表存在的/website8:
这样程序就能正常的工作,无论我们部署这个程序到那个虚拟目录。
当然,我们还要保证Roles、Profile、WebPartPersonalization或其他的我们配置的providers也要被配置了。
这样我们的程序可以正常工作了。
如果在一开始就避免它:
避免这个问题的最好的办法是始终设置applicationName的值。一个比较好的默认值是使用“/”。
相关推荐
Memcache客户端MemcachedProviders for .net 2.0 实例
Welcome to Professional ASP.NET 2.0 Server Control and Component Development. The ASP.NET 2.0 Framework consists of two groups of components. The first group contains server controls, that is, those ...
Welcome to Professional ASP.NET 2.0 Server Control and Component Development. The ASP.NET 2.0 Framework consists of two groups of components. The first group contains server controls, that is, those ...
Welcome to Professional ASP.NET 2.0 Server Control and Component Development. The ASP.NET 2.0 Framework consists of two groups of components. The first group contains server controls, that is, those ...
Oracle Providers for ASP.NET 2.0 12.2.0.1.0 Oracle Providers for ASP.NET 4 12.1.0.2.0 Oracle Providers for ASP.NET 2.0 12.1.0.2.0 Oracle Database Extensions for .NET 4 12.1.0.2.0 — 仅用于升级 Oracle ...
jssk使用ASP.NET 2.0开发,并且利用了如下的特性 JSSK is developed using ASP.NET 2.0 and uses following features: Completely based on n-tier architecture 完全基于多层架构n-tier Forms based ...
asp.net2.0如何加密数据库联接字符串 在asp.net2.0中,发布网站时,加密web.config,这样可以有效保证数据库用户和密码安全,其步骤如下: 1.添加密钥 执行:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis...
PetShop 4.0使用ASP.NET 2.0技术开发,其中加入了众多新增特性,因此,在性能、代码数量、可扩展性等方面有了重大改善。可以说,学习PetShop 4.0是深入掌握ASP.NET 2.0技术的捷径。本节将引领读者逐步了解PetShop ...
ASP.NET 2.0 Membership provider authenticates users against a store of users, the Role provider authorizes users to perform actions based on roles they have been assigned and the Profile provider ...
PetShop 4.0使用ASP.NET 2.0技术开发,其中加入了众多新增特性,因此,在性能、代码数量、可扩展性等方面有了重大改善。可以说,学习PetShop 4.0是深入掌握ASP.NET 2.0技术的捷径。本节将引领读者逐步了解PetShop ...
PetShop 4.0使用ASP.NET 2.0技术开发,其中加入了众多新增特性,因此,在性能、代码数量、可扩展性等方面有了重大改善。可以说,学习PetShop 4.0是深入掌握ASP.NET 2.0技术的捷径。本节将引领读者逐步了解PetShop ...
asp.net+oracle开发工具手册
64-bit Oracle Providers for ASP.NET 2.0 11.2.0.4.0 64-bit Oracle Provider for OLE DB 11.2.0.4.0 64-bit Oracle Services for Microsoft Transaction Server 11.2.0.4.0 64-bit Oracle Instant...
64-bit Oracle Providers for ASP.NET 2.0 12.1.0.2.0 64-bit Oracle Database Extensions for .NET 4 12.1.0.2.0 -- for upgrade only 64-bit Oracle Database Extensions for .NET 2.0 12.1.0.2.0 -- ...
64-bit Oracle Providers for ASP.NET 2.0 12.1.0.2.0 64-bit Oracle Database Extensions for .NET 4 12.1.0.2.0 -- for upgrade only 64-bit Oracle Database Extensions for .NET 2.0 12.1.0.2.0 -- ...
AspNet.Security.OAuth.Providers AspNet.Security.OAuth.Providers是安全中间件的集合,您可以在ASP.NET Core应用程序中使用它来支持 , 或类的社交身份验证提供程序。 它直接受到的倡议。 最新的正式版本可以在上...
CHAPTER 1 Introducing ASP.NET 3 CHAPTER 2 Visual Studio 23 CHAPTER 3 Web Forms 71 CHAPTER 4 Server Controls 115 CHAPTER 5 ASP.NET Applications 167 CHAPTER 6 State Management219 PART 2 Data ...
用Access 取代 自动生成的SQL SERVER 数据库,来管理asp.net网站中的成员管理.
Oracle Providers for ASP.NET Developer's Guide 11g Release 2 (11.2.0.3) for Windows-174
A new property is available to T4 files from the ASP.NET MVC T4 host that specifies the version of the .NET Framework that is used by the application. This allows T4 templates to generate code and ...