Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Sicherheitsausnahme bei Verwendung von MySQL und Entity Framework auf Godaddy

Seltsam. Shared-Hosting-ASP.NET-Apps von GoDaddy werden unter mittlerer Vertrauenswürdigkeit ausgeführt, und die Erstellung von Leistungszählern erfordert wahrscheinlich volles Vertrauen, aber die Erstellung von Leistungszählern ist nicht das, was hier fehlschlägt. (und wenn es fehlschlug, würde es sich nicht ausbreiten, da Ausnahmen bei der Erstellung von Leistungszählern vom mySQL-Clientcode geschluckt werden).

Stattdessen schlägt der Versuch fehl, auf eine Zeichenfolgenressource zuzugreifen, bevor der Leistungszähler erstellt wird. Der Fehler liegt an dieser Codezeile in Resources.Designer.cs des MySQL-Clients:

return ResourceManager.GetString("PerfMonCategoryName", resourceCulture)

Ein paar Dinge zum Ausprobieren, in aufsteigender Reihenfolge des Schwierigkeitsgrades:

  1. Stellen Sie sicher, dass sich die MySQL-Client-DLLs im BIN-Verzeichnis Ihrer App befinden und Sie nicht versuchen, die Client-DLL aus GoDaddys GAC zu laden. Verlassen Sie sich niemals auf von GoDaddy bereitgestellte Binärdateien, wenn Sie dies vermeiden können!

  2. Wechseln Sie zur EN-US-Kultur, damit der Client nicht nach einer anderen Ressourcen-DLL suchen muss, und sehen Sie, ob das Problem behoben ist.

  3. Erstellen Sie den .NET-Client aus dem Quellcode, anstatt DLLs aus einer Binärdistribution in das BIN-Verzeichnis Ihrer App zu kopieren. Dadurch lassen sich Probleme wie dieses leichter debuggen, da der mySQL-Code keine Blackbox ist. Und zur Not können Sie die problematischen Aufrufe zum Abrufen von Ressourcen ändern (oder das Gebietsschema fest codieren)! :-)

Übrigens, falls Sie versucht sind, "Use Performance Monitor=false" in Ihrer Verbindungszeichenfolge zu setzen, um zu versuchen, das Problem zu umgehen, machen Sie sich keine Sorgen. Der problematische Code wird unabhängig von dieser Einstellung ausgeführt:

    public PerformanceMonitor(MySqlConnection connection)
    {
        this.connection = connection;

        //// this line is where it bombs
        string categoryName = Resources.PerfMonCategoryName;

        //// this line is affected by connection string setting
        if (connection.Settings.UsePerformanceMonitor && procedureHardQueries == null)
        {
            try
            {
                procedureHardQueries = new PerformanceCounter(categoryName,
                                                              "HardProcedureQueries", false);
                procedureSoftQueries = new PerformanceCounter(categoryName,
                                                              "SoftProcedureQueries", false);
            }
            catch (Exception ex)
            {
                Logger.LogException(ex);
            }
        }
    }