2

J'ai un ActiveDirectoryMembershipProvider et j'ai un SQLMembershipProvider (Essentiellement, c'est une application ASP.Net où les utilisateurs générés pour l'application et les utilisateurs du répertoire actif peuvent tous deux se connecter). Je voudrais configurer le contrôleur de connexion de sorte que si le fournisseur de l'AD ne peut pas parler au serveur AD lorsqu'un utilisateur local se connecte, il réinitialisera le fournisseur d'AD quand un autre utilisateur essayera de se connecter.Réinitialiser MembershipProvider ASP.NET

Pour autant que je sache, l'application initialise les deux fournisseurs lorsque l'un est appelé. ADProvider essaye de se connecter et s'il ne le peut pas, il génère une erreur. Actuellement, j'attrape l'erreur et je la rejette silencieusement. Les utilisateurs locaux peuvent se connecter, mais lorsque je redémarre mon serveur AD, je n'arrive pas à trouver un moyen d'obtenir l'ADProvider pour essayer de se reconnecter. J'ai essayé d'appeler initialize() encore, mais il jette une erreur «déjà initialisée».

Si j'ai besoin de créer le mien, très bien, j'espère qu'il y a une configuration ou une méthode simple qui me manque.

Répondre

0

J'ai enfin compris ce qu'il faut faire dans ce cas:

//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); 
    } 

    .... 

Ensuite, pour toute méthode que je ne veux pas mettre en œuvre (par exemple, je ne veux pas changer les données sur le serveur AD, Je veux juste énumérer et vérifier les utilisateurs) J'ai juste une exception NotImplemented

Questions connexes