Yang aneh. Aplikasi ASP.NET hosting bersama GoDaddy dijalankan di bawah Medium Trust, dan pembuatan penghitung kinerja mungkin memerlukan kepercayaan penuh, tetapi pembuatan penghitung kinerja bukanlah yang gagal di sini. (dan jika gagal, itu tidak akan menyebar karena pengecualian pembuatan perf coutner ditelan oleh kode klien mySQL).
Alih-alih, itu gagal mencoba mengakses sumber daya string, sebelum pembuatan penghitung kinerja. Kegagalannya adalah dengan baris kode ini di Resources.Designer.cs dari klien MySQL:
return ResourceManager.GetString("PerfMonCategoryName", resourceCulture)
Beberapa hal untuk dicoba, dalam urutan kesulitan yang meningkat:
-
pastikan Anda memiliki DLL klien MySQL di direktori BIN aplikasi dan Anda tidak mencoba memuat DLL klien dari GAC GoDaddy. Jangan pernah bergantung pada binari yang disediakan GoDaddy jika Anda dapat menghindarinya!
-
beralih ke budaya EN-US sehingga klien tidak perlu mencari DLL sumber daya lain, dan melihat apakah masalahnya hilang.
-
Bangun klien .NET dari kode sumber, alih-alih menyalin DLL dari distribusi biner ke direktori BIN aplikasi Anda. Ini akan membuat masalah seperti ini lebih mudah untuk di-debug karena kode mySQL tidak akan menjadi kotak hitam. Dan, dalam keadaan darurat, akan memungkinkan Anda mengubah panggilan pengambilan sumber daya yang bermasalah (atau hard-code lokal)! :-)
BTW, jika Anda tergoda untuk mengatur "Gunakan Performance Monitor=false" di string koneksi Anda untuk mencoba menghindari masalah, jangan repot-repot. Kode bermasalah akan dieksekusi terlepas dari pengaturan itu:
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);
}
}
}