nJupiter.DataAccess.Ldap 在配置文件中支持同时配置多台服务器。我建议您在 nJupiter.DataAccess.Ldap.config 中配置您将使用的所有服务器,如下所示:
<configuration>
<ldapServers>
<ldapServer value="MyServer1"><!-- config goes here --></ldapServer>
<ldapServer value="MyServer2"><!-- config goes here --></ldapServer>
</ldapServers>
</configuration>
然后可以在Web.Config中为每台服务器配置一个MembershipProvider/RoleProvider;像这样:
<system.web>
<membership defaultProvider="MyProvider1">
<providers>
<clear/>
<add name="MyProvider1" ldapServer="MyServer1" type="nJupiter.DataAccess.Ldap.LdapMembershipProvider,nJupiter.DataAccess.Ldap" />
<add name="MyProvider2" ldapServer="MyServer2" type="nJupiter.DataAccess.Ldap.LdapMembershipProvider,nJupiter.DataAccess.Ldap" />
</providers>
</membership>
</system.web>
然后,您可以使用System.Web.Security.Membership.Providers["MyProvider1"]
和在运行时在提供程序之间进行更改System.Web.Security.Membership.Providers["MyProvider2"]
。
ASP.NET 仅支持一个默认提供程序,因此如果您想将不同的用户重定向到不同的提供程序,但仍想使用普通的 ASP.NET 体系结构,我建议您做一个包装 MembershipProvider/RoleProvider 以动态重定向到正确的提供程序。这是一些伪代码:
public class RedirctingMembershipProvider : System.Web.Security.MembershipProvider {
public override MembershipUser GetUser(string username, bool userIsOnline) {
if(username.Contains("@MyDomain1"){
return Membership.Providers["MyProvider1"].GetUser(username, userIsOnline);
}
if(username.Contains("@MyDomain2"){
return Membership.Providers["MyProvider2"].GetUser(username, userIsOnline);
...
然后将此提供程序注册为 web.config 中的默认提供程序,如下所示:
<system.web>
<membership defaultProvider="RedirctingMembershipProvider">
<providers>
<clear/>
<add name="RedirctingMembershipProvider" type="MyNameSpace.RedirctingMembershipProvider,MyAssembly" />
<add name="MyProvider1" ldapServer="MyServer1" type="nJupiter.DataAccess.Ldap.LdapMembershipProvider,nJupiter.DataAccess.Ldap" />
<add name="MyProvider2" ldapServer="MyServer2" type="nJupiter.DataAccess.Ldap.LdapMembershipProvider,nJupiter.DataAccess.Ldap" />
</providers>
</membership>
</system.web>