Странно. ASP.NET приложенията за споделен хостинг на GoDaddy се изпълняват при средно доверие и създаването на perf counter вероятно изисква пълно доверие, но създаването на perf counter не е това, което се проваля тук. (и ако се провали, няма да се разпространи, тъй като изключенията за създаване на perf coutner се поглъщат от клиентския код на mySQL).
Вместо това, не успява да се опита да получи достъп до низов ресурс, преди създаването на брояч на perf. Грешката е с този ред код в Resources.Designer.cs на MySQL клиента:
return ResourceManager.GetString("PerfMonCategoryName", resourceCulture)
Няколко неща, които да опитате, в нарастващ ред на трудност:
-
уверете се, че имате MySQL клиентските DLL файлове в BIN директорията на приложението си и не се опитвате да заредите клиентската DLL от GAC на GoDaddy. Никога не разчитайте на двоични файлове, предоставени от GoDaddy, ако можете да го избегнете!
-
превключете към култура EN-US, за да не се налага клиентът да търси друг DLL ресурс и да виж дали проблемът изчезва.
-
Създайте .NET клиента от изходния код, вместо да копирате DLL файлове от двоична дистрибуция в BIN директорията на вашето приложение. Това ще направи проблеми като този по-лесни за отстраняване на грешки, тъй като mySQL кодът няма да бъде черна кутия. И в крачка, ще ви позволи да промените проблемните повиквания за извличане на ресурси (или твърдо кодиране на локала)! :-)
BTW, в случай, че се изкушите да зададете „Use Performance Monitor=false“ във вашия низ за връзка, за да се опитате да избегнете проблема, не се притеснявайте. Проблемният код се изпълнява независимо от тази настройка:
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);
}
}
}