本文转自:http://www.cnblogs.com/Andon_liu/
因为一般教程使用的示例都是 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 更改 Membership 的 Provider
我们可以参考 machine.config 文件中的内容:
( machine.config 在 %systemroot%/Microsoft.NET/Framework/v2.x/CONFIG 目录下)
然后修改 Membership 的 provider. ,修改的时候需要注意一个问题,因为 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的。 clear 原来的 provider, 然后再增加自己的 provider(connectiongStringName设置为我们自己的ConnectionString):
这里需要注意的另一个问题就是, provider 的名字一定需要是 AspNetSqlMembershipProvider ,其他名字就会出现这个错误:Default Membership Provider could not be found. 因为原来已经指定了AspNetSqlMembershipProvider为Default Provider. PS:此文只针对SQL Server数据库
<
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
>
另一种选择是,我们首先
<
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
>
<
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
>