小新的技术天地

Make It Works !

博客园 首页 新随笔 联系 订阅 管理
  132 Posts :: 1 Stories :: 491 Comments :: 11 Trackbacks

初学MemberShip,遇到一个Membership设置的问题

因为一般教程使用的示例都是SQL Server 2005 Express版本的本地 ASPNETDB.MDF文件,如果我要使用远程的Sql Server 2005服务器的话,需要进行一些设置。

Setp1:当你使用Membership, 我们可以发现ASP.NET 2.0 已经在 SQL Server 2005 Express建立了很多表(aspnet_Membership),视图,存储过程等。当时我们自己的远程服务器上并没有这些表。难道我们需要自己建?当然不用,微软给我们准备了一个工具:

%systemroot%\Microsoft.NET\Framework\v2.x\

目录下的aspnet_regsql工具

根据它的向导,可以很方便地指定你的服务器和数据库。完成之后,我们可以发现,我们的远程服务器上制定数据库上已经创建好了我们需要的表,视图,存储过程等。

Step2:这时候我们需要在web.config更改MembershipProvider

我们可以参考machine.config文件中的内容:

machine.config%systemroot%\Microsoft.NET\Framework\v2.x\CONFIG目录下)

  <connectionStrings>
    
<add name="LocalSqlServer" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient" />
  
</connectionStrings>

    
<membership>
      
<providers>
        
<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="LocalSqlServer" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" applicationName="/" requiresUniqueEmail="false" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10" passwordStrengthRegularExpression="" />
      
</providers>
    
</membership>


你可以直接在machine.config里更改,不过这里一更改,会影响到以后所有ASP.NET程序的设置,所以我们还是在自己的web.config中更改比较好

web.config中,首先创建我们自己的连接字符串:

    <connectionStrings>
        
<add name="remoteSqlServer" connectionString="server=..;uid=..;pwd=..;initial catalog=.." providerName="System.Data.SqlClient" />
    
</connectionStrings>

然后修改Membershipprovider.,修改的时候需要注意一个问题,因为machine.config中已经存在一个provider了,所以你直接增加一个provider的话

        <membership>            
            
<providers>
            
            
<add name="RemoteSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="remoteSqlServer" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" applicationName="/" requiresUniqueEmail="false" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10" passwordStrengthRegularExpression="" />            
            
</providers>
        
</membership>

在程序运行中还是会去寻找在machineconfig中定义的AspNetSqlMembershipProvider,因为那个是default。所以一种选择是,我们把这个新的Provider设置为Default的。

        <membership defaultProvider="RemoteSqlMembershipProvider">
            
            
<providers>
            
            
<add name="RemoteSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="remoteSqlServer" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" applicationName="/" requiresUniqueEmail="false" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10" passwordStrengthRegularExpression="" />
            
            
</providers>


另一种选择是,我们首先clear原来的provider,然后再增加自己的provider(connectiongStringName设置为我们自己的ConnectionString):

        <membership>            
            
<providers>
            
<clear/>
            
<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="remoteSqlServer" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" applicationName="/" requiresUniqueEmail="false" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10" passwordStrengthRegularExpression="" />            
            
</providers>
        
</membership>

这里需要注意的另一个问题就是,provider的名字一定需要是AspNetSqlMembershipProvider,其他名字就会出现这个错误:
Default Membership Provider could not be found.
因为原来已经指定了AspNetSqlMembershipProvider为Default Provider.

PS:此文只针对SQL Server数据库

posted on 2006-08-31 10:50 小新0574 阅读(6405) 评论(11) 编辑 收藏

Feedback

#1楼 2006-08-31 12:49 罗非凡      
如果要启用角色功能的话,还要在web.config中添加rolemanager部分修改的内容,role的provider需要相应修改
 回复 引用 查看   

#2楼 2006-08-31 14:30 pakerliu[未注册用户]
现在开发时用户权限,都是自己专门有个模块管理。微软提供的Ship,有时间研究一下,看看会不会方便开发。
http://www.pakerliu.com

 回复 引用   

#3楼 2006-09-30 21:40 hxling[未注册用户]
Thank you!
这篇文章解决了大部他的疑惑!看那ASP.NET2.0开发指南时,没看明白,就因为没提及这句话
“根据它的向导,可以很方便地指定你的服务器和数据库。完成之后,我们可以发现,我们的远程服务器上制定数据库上已经创建好了我们需要的表,视图,存储过程等。


也许是因为我比较懒吧!下次一定要亲力亲为之!


 回复 引用   

如果是一个解决方案中要用到两个MemberShip的数据库(分开),要怎么样设置?
 回复 引用   

#5楼 2006-11-11 09:39 天轰穿      
最近vs2005入门系列视频教程做到这一段了,我想在视频中会用到您的这篇文章,不知道可以不,如果可以的话就给个OK啦!
 回复 引用 查看   

#6楼[楼主] 2006-11-12 14:04 小新0574      
TO 天轰穿

没问题,OK

 回复 引用 查看   

#7楼 2006-11-14 02:02 天轰穿      
@小新0574
3KU,那偶就用了哈,呵呵

 回复 引用 查看   

#8楼 2007-07-04 17:52 小说[未注册用户]
不是太懂
 回复 引用   

请教:我在进入http://www.ebizrotator.com/goto/BY7890.htm主页后,点击member login进入IDBY7890 密码######点击Enter进入下页,接下去怎么做请教前辈;我的页面左侧没有,只有最下方有三个可以点击,Pro Upgrade! Protrial offer! Upgrade Later!
 回复 引用   

#10楼 2008-11-24 23:14 悦悦[未注册用户]
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\ASP.NETWebAdminFiles\App_Data

有个xml文件 貌似可以改的

 回复 引用   

#11楼 2009-08-12 16:24 ccflow[未注册用户]
谢谢楼主分享,
给正在研究工作流的朋友推荐个功能很强的工作流引擎,.NET驰骋工作流引擎ccflow:
面向业务人员,流程设计(自定义节点,方向条件等)、表单自定义、报表定义、文书自定义、绩效时效考核、流程前台运行等特色;
支持oracle, sqlserver,db2 数据库;
支持中、繁体、英、日、韩等语言;
.NET驰骋工作流引擎ccflow demo演示地址:http://ccflow.cn/ftp/flow/demo/
QQ:908377265

 回复 引用