Vreemde. GoDaddy shared-hosting ASP.NET-apps worden uitgevoerd onder Medium Trust, en het maken van een prestatieteller vereist waarschijnlijk volledig vertrouwen, maar het maken van een prestatieteller is niet wat hier faalt. (en als het mislukt, zou het zich niet verspreiden omdat uitzonderingen voor het maken van perf-countners worden opgeslokt door mySQL-clientcode).
In plaats daarvan probeert het geen toegang te krijgen tot een tekenreeksbron, voordat de perfteller wordt gemaakt. De fout zit in deze regel code in Resources.Designer.cs van de MySQL-client:
return ResourceManager.GetString("PerfMonCategoryName", resourceCulture)
Een paar dingen om te proberen, in oplopende moeilijkheidsgraad:
-
zorg ervoor dat u de MySQL-client-DLL's in de BIN-directory van uw app hebt staan en dat u niet probeert de client-DLL uit de GAC van GoDaddy te laden. Vertrouw nooit op door GoDaddy geleverde binaire bestanden als u dit kunt vermijden!
-
schakel over naar de EN-VS-cultuur, zodat de klant niet hoeft te zoeken naar een andere bron-DLL om te zien of het probleem verdwijnt.
-
Bouw de .NET-client op basis van de broncode, in plaats van DLL's van een binaire distributie naar de BIN-directory van uw app te kopiëren. Dit maakt het gemakkelijker om problemen als deze te debuggen, aangezien de mySQL-code geen black box zal zijn. En, in een mum van tijd, kunt u de problematische oproepen voor het ophalen van bronnen wijzigen (of de landinstelling hard coderen)! :-)
Trouwens, als je in de verleiding komt om "Use Performance Monitor=false" in je verbindingsreeks in te stellen om te proberen het probleem te omzeilen, doe geen moeite. De problematische code wordt uitgevoerd ongeacht die instelling:
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);
}
}
}