Konstig en. GoDaddy delade ASP.NET-appar körs under Medium Trust, och skapande av perf-räknare kräver förmodligen fullt förtroende, men att skapa perf-räknare är inte det som misslyckas här. (och om det misslyckades, skulle det inte spridas eftersom undantag för skapande av perf countner sväljs av mySQL-klientkoden).
Istället misslyckas det att försöka få åtkomst till en strängresurs innan perfräknaren skapas. Felet beror på denna kodrad i Resources.Designer.cs i MySQL-klienten:
return ResourceManager.GetString("PerfMonCategoryName", resourceCulture)
Några saker att prova, i ökande svårighetsgrad:
-
se till att du har MySQL-klientens DLL-filer i din app BIN-katalog och att du inte försöker ladda klient-DLL:erna från GoDaddys GAC. Lita aldrig på GoDaddy-levererade binärfiler om du kan undvika det!
-
byt till EN-US-kultur så att klienten inte behöver gå på jakt efter en annan resurs-DLL och se om problemet försvinner.
-
Bygg .NET-klienten från källkoden, istället för att kopiera DLL:er från en binär distribution till din app BIN-katalog. Detta kommer att göra problem som detta lättare att felsöka eftersom mySQL-koden inte kommer att vara en svart låda. Och, i ett nafs, låter dig ändra de problematiska resurshämtningsanropen (eller hårdkoda lokalen)! :-)
BTW, om du är frestad att ställa in "Use Performance Monitor=false" i din anslutningssträng för att försöka undvika problemet, bry dig inte. Den problematiska koden exekveras oavsett den inställningen:
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);
}
}
}