sql >> Base de Datos >  >> RDS >> Mysql

Excepción de seguridad usando MySQL y Entity Framework en Godaddy

uno raro Las aplicaciones ASP.NET de alojamiento compartido de GoDaddy se ejecutan con confianza media, y la creación de contadores de rendimiento probablemente requiera plena confianza, pero la creación de contadores de rendimiento no es lo que está fallando aquí. (y si fallara, no se propagaría ya que las excepciones de creación de contadores de rendimiento son tragadas por el código del cliente mySQL).

En cambio, está fallando al intentar acceder a un recurso de cadena, antes de la creación del contador de rendimiento. El fallo está en esta línea de código en Resources.Designer.cs del cliente MySQL:

return ResourceManager.GetString("PerfMonCategoryName", resourceCulture)

Algunas cosas para probar, en orden creciente de dificultad:

  1. asegúrese de tener las DLL del cliente MySQL en el directorio BIN de su aplicación y de no intentar cargar la DLL del cliente desde el GAC de GoDaddy. ¡Nunca dependa de los binarios proporcionados por GoDaddy si puede evitarlo!

  2. cambie a la referencia cultural EN-US para que el cliente no tenga que buscar otro DLL de recursos y ver si el problema desaparece.

  3. Cree el cliente .NET a partir del código fuente, en lugar de copiar archivos DLL de una distribución binaria en el directorio BIN de su aplicación. Esto hará que problemas como este sean más fáciles de depurar ya que el código mySQL no será una caja negra. ¡Y, en caso de necesidad, le permitirá cambiar las llamadas problemáticas de búsqueda de recursos (o codificar la configuración regional)! :-)

Por cierto, en caso de que tenga la tentación de establecer "Usar Monitor de rendimiento =falso" en su cadena de conexión para tratar de evadir el problema, no se moleste. El código problemático se ejecuta independientemente de esa configuración:

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