none
Enregistrement de Membership et de Profile RRS feed

  • Question

  • Bonjour tout le monde,

    J'ai utilisé un modèle de site web avec "Individual User Accounts", il est crédible qu'il ait été créé comme expliqué là :

    Adding ASP.NET Identity to an Empty or Existing Web Forms Project

    Avec ça on crée facilement des utilisateurs, et on peut vérifier si ils sont authentifiés.

    J'ai créé une interface utilisateur (des formulaires) pour créer des rôles et les affecter aux utilisateurs, d'ailleurs les tables sont fournies dans la base de données.

    Jusque là, tout va bien.

    Ensuite, j'ai voulu implémenter le gestionnaire de profils. Je m'y suis pris comme expliqué là :

    How to: Build and Run the Profile Provider Example

    Bon, ça compile. Je mets un point d'arrêt pour afficher Context.Profile.UserName, et voilà ce qu'on me répond :

    'Context.Profile.UserName' a levé une exception de type 'System.Configuration.ConfigurationErrorsException'
        BareMessage: "Impossible de charger le fichier ou l'assembly 'MySql.ConnectorInstaller, Version=6.10.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d' ou une de ses dépendances. Le fichier spécifié est introuvable."
        Data: {System.Collections.ListDictionaryInternal}
        Errors: {System.Configuration.ConfigurationException[1]}
        Filename: "C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\Config\\machine.config"
        HResult: -2146232062
        HelpLink: null
        InnerException: {"Impossible de charger le fichier ou l'assembly 'MySql.ConnectorInstaller, Version=6.10.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d' ou une de ses dépendances. Le fichier spécifié est introuvable.":"MySql.ConnectorInstaller, Version=6.10.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"}
        Line: 271
        Message: "Impossible de charger le fichier ou l'assembly 'MySql.ConnectorInstaller, Version=6.10.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d' ou une de ses dépendances. Le fichier spécifié est introuvable. (C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\Config\\machine.config line 271)"
        Source: "System.Web"
        StackTrace: "   à System.Web.Profile.ProfileBase.InitializeStatic()\r\n   à System.Web.Profile.ProfileBase.Create(String username, Boolean isAuthenticated)\r\n   à System.Web.HttpContext.get_Profile()"
        TargetSite: {Void InitializeStatic()}
    J'ai cherché "MySql" sur toute l'application, particulièrement dans le web.config et dans le code du ProfileProvider, mais je n'ai pas trouvé.

    Je devrais regarder dans le machine.config ?

    (Il y a bien MySql installé sur la machine, mais pas utilisé dans le projet.)

    J'ai regardé sur C:, et des machine.config j'en ai trouvé deux.

    Voilà les chemins :

    C:\Windows\WinSxS\x86_netfx4-machine_config_b03f5f7f11d50a3a_4.0.15671.0_none_c7f241a5a9eaf880

    C:\Windows\WinSxS\x86_netfx-machine_config_ocm_b03f5f7f11d50a3a_10.0.17134.1_none_b2413d47acaf0bc6

    Il y a aussi des machine.config.default, dans des répertoires qui ont à peu près le même type de noms.

    Si quelqu'un pouvait me rafraichir un peu la mémoire sur où au juste il faut chercher plus précisément ?

    Ma machine est en Windows 10 1803 64 bits, le disque comporte deux partitions, C: contient le système et les programmes dont Visual Studio, en backup d'un SSD, et D: est le disque de données, où sont enregistrés les projets (parce que j'ai veillé au grain sinon par défaut on me les mettait sur C:).




    • Modifié Gloops mercredi 26 septembre 2018 15:50
    mercredi 26 septembre 2018 15:39

Toutes les réponses

  • Voilà pourquoi ça aide de poser la question dans un forum : on a la réponse juste sous les yeux.

    Alors effectivement dans le machine.config indiqué on a ça :

        <profile>
          <providers>
            <add name="AspNetSqlProfileProvider" connectionStringName="LocalSqlServer" applicationName="/" type="System.Web.Profile.SqlProfileProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
            <add name="MySQLProfileProvider" type="MySql.Web.Profile.MySQLProfileProvider, MySql.ConnectorInstaller, Version=6.10.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" connectionStringName="LocalMySqlServer" applicationName="/" />
          </providers>

    Ils n'ont pas le même nom que celui que j'utilise, ça n'aurait pas dû gêner ?

    Ah si j'y suis : je n'ai pas développé de MySQLProfileProvider. Je me rappelle avoir dû terminer le fournisseur d'accès aux données il y a plusieurs années, alors un ProfileProvider tout prêt maintenant que celui de Microsoft ne fonctionne plus ...

    J'ai ajouté <clear /> devant ma déclaration de ProfileProvider, et ça a réglé le problème.

    Maintenant, il me trouve mon assembly en doublon, dont un exemplaire dans un répertoire temporaire, ce n'est pas tout-à-fait le même problème.

    J'ai vidé le répertoire temporaire (enfin son sous-répertoire qui fâche), puis relancé l'application, pareil.

    Encore pareil si après ça je lance Générer, nettoyer.

    Bon, on va laisser passer un peu de temps là-dessus, autrement bien sûr si il y a une explication classique que quelqu'un voit tout de suite ...



    • Modifié Gloops mercredi 26 septembre 2018 16:13
    mercredi 26 septembre 2018 15:55
  • J'avais donc mon ProfileProvider en double.

    Il s'avère que l'un était présent dans le répertoire bin, où il se recrée si je l'efface, et l'autre résultait de la compilation du répertoire App_Code.

    La résolution du problème a consisté à déplacer le ProfileProvider du répertoire App_Code vers la racine du projet, en attendant d'avoir mieux assimilé ce point. Si quelqu'un a une lecture à me recommander, là-dessus ?

    Maintenant j'ai un autre problème : le projet n'initialise pas le ProfileProvider sans que je le fasse explicitement. Là, je pense que j'ai dû louper un truc.

    Donc la première chose qu'il faut regarder c'est le web.config :

      <connectionStrings>
        <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\aspnet-WebApplication2-20180913101751.mdf;Initial Catalog=aspnet-WebApplication2-20180913101751;Integrated Security=True" providerName="System.Data.SqlClient"/>
        <add name="AuthConnectionString" connectionString="Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\aspnet-WebApplication2-20180913101751.mdf;Integrated Security=True;Connect Timeout=30" providerName="System.Data.SqlClient"/>
      </connectionStrings>

    <system.web>

    <!-- ... -->

    <anonymousIdentification enabled="true"/> <authentication mode="Forms" > <forms loginUrl="Account/login.aspx" name=".ASPXFORMSAUTH" /> </authentication> <profile defaultProvider="SqlProvider"> <providers> <clear /> <add name="SqlProvider" type="WebApplication2.Sql2014ProfileProvider1" connectionStringName="AuthConnectionString" /> </providers> <properties> <add name="ZipCode" allowAnonymous="true" /> <add name="CityAndState" provider="AspNetSqlProfileProvider" allowAnonymous="true" /> <add name="StockSymbols" type="System.Collections.ArrayList" allowAnonymous="true" /> </properties> </profile>

    </system.web>

    Quand je demande à afficher Context.Profile.Username, j'arrive bien dans le ProfileProvider, mais il n'a pas reçu la chaîne de connexion ni les propriétés de configuration, donc il peut difficilement retourner les bonnes informations.

    Je pourrais plonger dans le web.config directement depuis le ProfileProvider, mais j'ai comme l'impression que ce n'est pas la façon normale de travailler.

    J'ai dû oublier quelque chose ?

    **

    Lors d'un point d'arrêt au chargement de la page maîtresse, après avoir authentifié un utilisateur, j'obtiens l'erreur 800703E9.

    Ce qui confirme qu'il ne faut pas laisser les choses en l'état.

    • Modifié Gloops jeudi 27 septembre 2018 09:07
    jeudi 27 septembre 2018 08:48