Underlig en. GoDaddy shared-hosting ASP.NET-apps udføres under Medium Trust, og oprettelse af perf-tæller kræver sandsynligvis fuld tillid, men perf-tæller-oprettelse er ikke det, der fejler her. (og hvis det mislykkedes, ville det ikke forplante sig, da undtagelser til oprettelse af perf countner sluges af mySQL-klientkode).
I stedet mislykkes det at forsøge at få adgang til en strengressource før oprettelse af perf-tæller. Fejlen skyldes denne kodelinje i Resources.Designer.cs i MySQL-klienten:
return ResourceManager.GetString("PerfMonCategoryName", resourceCulture)
Et par ting at prøve, i stigende sværhedsgrad:
-
sørg for, at du har MySQL-klient-DLL'erne i din apps BIN-mappe, og du forsøger ikke at indlæse klient-DLL'en fra GoDaddy's GAC. Stol aldrig på GoDaddy-leverede binære filer, hvis du kan undgå det!
-
skift til EN-US-kultur, så klienten ikke behøver at gå på jagt efter en anden ressource-DLL, og se om problemet forsvinder.
-
Byg .NET-klienten ud fra kildekoden i stedet for at kopiere DLL'er fra en binær distribution til din apps BIN-mappe. Dette vil gøre problemer som dette nemmere at fejlfinde, da mySQL-koden ikke vil være en sort boks. Og på et øjeblik vil du lade dig ændre de problematiske ressourcehentende opkald (eller hårdkode lokaliteten)! :-)
BTW, hvis du er fristet til at indstille "Use Performance Monitor=false" i din forbindelsesstreng for at forsøge at undgå problemet, så gider du ikke. Den problematiske kode bliver eksekveret uanset denne indstilling:
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);
}
}
}