Uno strano. Le app ASP.NET di hosting condiviso di GoDaddy vengono eseguite con fiducia media e la creazione di contatori perf probabilmente richiede la piena fiducia, ma la creazione di contatori perf non è ciò che fallisce qui. (e se fallisse, non si propagherebbe poiché le eccezioni di creazione di perf coutner vengono inghiottite dal codice client MySQL).
Invece, non riesce ad accedere a una risorsa stringa, prima della creazione del contatore perf. L'errore è con questa riga di codice in Resources.Designer.cs del client MySQL:
return ResourceManager.GetString("PerfMonCategoryName", resourceCulture)
Alcune cose da provare, in ordine crescente di difficoltà:
-
assicurati di avere le DLL del client MySQL nella directory BIN della tua app e non stai tentando di caricare la DLL del client dal GAC di GoDaddy. Non dipendere mai dai binari forniti da GoDaddy se puoi evitarlo!
-
passa alla cultura EN-US in modo che il client non debba andare a caccia di un'altra DLL di risorse e vedere se il problema scompare.
-
Crea il client .NET dal codice sorgente, invece di copiare le DLL da una distribuzione binaria nella directory BIN dell'app. Ciò renderà più facile il debug di problemi come questo poiché il codice MySQL non sarà una scatola nera. E, in un attimo, ti consentirà di modificare le chiamate problematiche di recupero delle risorse (o di codificare la locale)! :-)
A proposito, nel caso in cui sei tentato di impostare "Usa Performance Monitor=false" nella stringa di connessione per cercare di eludere il problema, non preoccuparti. Il codice problematico viene eseguito indipendentemente da tale impostazione:
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);
}
}
}