首先,先转发http://www.cnblogs.com/David-Qian/archive/2009/02/18/1392569.html
ApplicationName 得到的启示

不知道大家有没有遇到过这样的情况,在测试环境中,ASP.NET程序一切运行正常,可一旦部署到远程IIS server上时,membership验证就出现问题了,Login控件提示“登录失败,请重试”。如果你遇到过这种情况,请看如下解释。

这大都是由于ApplicationName引起的。我们在web.config中配置membership,role,profile等信息时,正常都会添加上ApplicationName='/'或ApplicationName='specificName'。如果你没有配置ApplicationName,那么这个问题就出现了。

简单的说,membership验证时是需要知道application的名字的。如果你配置了,那么一切都OK。如果你没配置,它默认会添加上虚拟目录的名字。这样就有问题了,因为我们在远程IIS中很可能使用了不同名字的虚拟目录,这就导致了原来的用户无法得到验证。

如果你不信的话,可以在自己的机器上修改membership的ApplicationName配置,然后你再试试原来的用户能否通过验证,答案是:不能。

ApplicationName的配置可以是一个特定的name,如MyApp。也可以是一个斜杠'/',它将使用ASP.NET 2.0默认配置。ApplicationName是存储在membership数据库的aspnet_Applications的表中的,大家可以check下。同时,每个用户都会对应一个applicationID(check aspnet_Users表),这就是为什么改了ApplicationName后,原先的用户将无法验证的原因了。

还是老话,问题虽小,希望大家能理解其中的原理,对今后有所帮助!同时,我也希望大家能够说说自己的理解和感受,并把自己的一些经验分享出来,让所有人都能得到提升!

Have a nice day!

 

================

本人也是同样的情况,这次用的是oracel,所以一直以为是oracel的问题,调试的时候成功,发布后IIS就不成功,看了上面的文章解决了问题。

以前一直用的ms sql,这次还特地又弄了个ms sql测试也成功,更加以为是oracel那边的配置,但是毕竟调试状态能通过,:)

这次测试正好注意到在web.config文件里配置的时候applicationName=“”,所以可能我留空了,在数据库第一次建立用户或角色的时候,就加入了一个名字,

而默认的是applicationName=“/",测试的时候ms sql我就用了applicationName="/"。总之,这个问题明显和MS SQL还是oracel是没有关系的,

关键就是你配置文件里面如果留空,那么第一次建用户或使用membership其他功能时,就会创建一条aspnet_Applications记录,而名字是带有应用名的,

比如我的是"/TLERP",如果配置文件指定"/"那就是"/"。

posted on 2009-11-02 10:58  熵星尘  阅读(382)  评论(0编辑  收藏  举报