在ASP.NET 2.0 中,为我们提供了很好的成员即角色管理机制,可以方便地实现用户的注册及角色分配,对于基本的成员访问和角色控制进行了封装实现,但是,默认的情况下,这个用于提供成员即角色管理的数据库 aspnetdb 是要存储在 SQL Server 2005 的 Express 版本中的,下面通过建立个人站点的解决方案来讲述如何通过配置工具,实现 VS 2005 与 SQL Server 2000 的整合开发。
首先,安装好 VS 2005 后,如果 File-->New-->Web Site-->Personal Web Site Starter Kit 然后直接 RUN 的话,肯定会出现错误,提示 An error has occurred while establishing a connection to the server. When connecting to SQL Server 2005, this failure may be caused by the fact that under the default settings SQL Server does not allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified) 。但是,VS 给我们提供了很方便的使用工具,可以在命令行下使用 aspnet_regsql.exe 来指定默认使用的数据库服务器。它会为我们自动在配置的数据库服务器下生成 aspnetdb 这个用来管理成员即角色的库,这个工具可以在命令行下使用,也提供了 UI ,可以方便配置应用程序使用的数据库。aspnet_regsql
在使用这个 Starter Kits 的时候,可以把 Personal 的库通过它提供的脚本,存储在 SQL Server 2000 中,而不用使用 AttachDBFilename 的方式。具体可以通过 web.config 来配置,如下:
<connectionStrings>
<add name="Personal" connectionString="Data Source=yourServer;Integrated Security=True;Initial Catalog=Personal" />
<add name="SqlServices" connectionString="Data Source=yourServer;Integrated Security=SSPI;Initial Catalog=aspnetdb;" />
<remove name="LocalSqlServer"/>
</connectionStrings>
默认情况下,使用的连接是 machine.config 中定义的 LocalSqlServer ,你可以 remove 掉,同时,也不使用默认的 Membership & roles 的 Provider,也需要将 machine.config 中的默认 Provider 去掉。因为在其中,有如下的配置:
<roleManager>
<providers>
<add name="AspNetSqlRoleProvider" connectionStringName="LocalSqlServer" applicationName="/" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
</roleManager>
因为我们已经 remove 掉了默认的 LocalSqlServer 连接字符串,如果不 remove 掉 AspNetSqlRoleProvider 的话,会提示 The connection name 'LocalSqlServer' was not found in the applications configuration or the connection string is empty.
具体的使用自定制的方式可以如下设置:
<system.web>
<roleManager enabled="true" defaultProvider ="AspNetRoleProvider">
<providers>
<remove name="AspNetSqlRoleProvider" />
<add name="AspNetRoleProvider" connectionStringName="SqlServices"
type="System.Web.Security.SqlRoleProvider,System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
applicationName="/" />
</providers>
</roleManager>
<membership defaultProvider="AspNetMembershipProvider" userIsOnlineTimeWindow="20">
<providers>
<remove name="AspNetSqlMembershipProvider" />
<add name="AspNetMembershipProvider"
type="System.Web.Security.SqlMembershipProvider"
connectionStringName="SqlServices"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="true"
passwordFormat="Hashed"
applicationName="/" />
</providers>
</membership>
</system.web>
经过如此一番配置,你就可以使用 VS 2005 & SQL Server 2000 来实现成员访问和角色管理的开发了。呵呵,希望对刚介入 2.0 开发的朋友有所帮助。