Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Exceção de segurança usando MySQL e Entity Framework no godaddy


Estranho. Os aplicativos ASP.NET de hospedagem compartilhada GoDaddy são executados em Confiança Média, e a criação do contador de desempenho provavelmente requer confiança total, mas a criação do contador de desempenho não é o que está falhando aqui. (e se falhar, não se propagará, pois as exceções de criação do perf coutner são engolidas pelo código do cliente mySQL).

Em vez disso, está falhando ao tentar acessar um recurso de string, antes da criação do contador de desempenho. A falha está com esta linha de código em Resources.Designer.cs do cliente MySQL:
return ResourceManager.GetString("PerfMonCategoryName", resourceCulture)

Algumas coisas para tentar, em ordem crescente de dificuldade:

  1. verifique se você tem as DLLs do cliente MySQL no diretório BIN do seu aplicativo e não está tentando carregar a DLL do cliente do GAC do GoDaddy. Nunca dependa de binários fornecidos pela GoDaddy se puder evitá-lo!

  2. mude para a cultura EN-US para que o cliente não precise procurar outra DLL de recurso e veja se o problema desaparece.

  3. Crie o cliente .NET a partir do código-fonte, em vez de copiar DLLs de uma distribuição binária para o diretório BIN do seu aplicativo. Isso tornará problemas como esse mais fáceis de depurar, pois o código mySQL não será uma caixa preta. E, em um piscar de olhos, permitirá que você altere as chamadas problemáticas de busca de recursos (ou codifique a localidade)! :-)

BTW, caso você esteja tentado a definir "Use Performance Monitor =false" em sua string de conexão para tentar evitar o problema, não se preocupe. O código problemático é executado independentemente dessa configuração:
    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);
            }
        }
    }