重新初始化成员资格提供程序 ASP.NET
本文关键字:程序 ASP NET 初始化 成员 | 更新日期: 2023-09-27 18:33:23
我有一个ActiveDirectoryMemberProvider,我有一个SQLMembershipProvider(本质上,它是一个 ASP.Net 应用程序,为应用程序生成的用户和来自活动目录的用户都可以登录)。我想设置登录控制器,以便如果 AD 提供程序在本地用户登录时无法与 AD 服务器通信,它将在另一个用户尝试登录时重新初始化 ADProvider。
据我所知,当调用任何一个提供程序时,应用程序会初始化两个提供程序。 ADProvider 尝试连接,如果无法连接,则会引发错误。我目前捕获错误并默默丢弃。本地用户可以登录,但是当我重新启动AD服务器时,我似乎找不到让ADProvider尝试重新连接的方法。我尝试再次调用 initialize(),但它抛出了一个"已经初始化"的错误。
如果我需要创建自己的,很好,我希望缺少一些配置或简单的方法。
我终于想出了在这种情况下该怎么做:
//create our own AD Provider
private System.Web.Security.ActiveDirectoryMembershipProvider base_provider;
private bool initialised = false;
//these values are saved when Init if first called by the Membership Collection.
//So that I can pass them back into the new base_provider when it is made.
private string name = null;
private System.Collections.Specialized.NameValueCollection config;
private Exception init_exception;
public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config)
{
this.name = name;
this.config = config;
try
{
base_provider = new System.Web.Security.ActiveDirectoryMembershipProvider();
base_provider.Initialize(name, config);
initialised = true;
}
catch (Exception e)
{
this.base_provider = null;
init_exception = e;
}
}
public override System.Web.Security.MembershipUserCollection GetAllUsers(int pageIndex, int pageSize, out int totalRecords)
{
if (!initialised) this.Initialize(this.name, this.config);
//just a custom exception that my Membership object (that handles calling the two providers) picks up on
if (base_provider == null) throw new NotInitialisedException(this.init_exception.Message);
return base_provider.GetAllUsers(pageIndex, pageSize, out totalRecords);
}
....
然后对于我不想实现的任何方法(例如,我不想更改AD服务器上的任何数据,只想列出和验证用户),我只有一个NotImplementException