Bizarre. Les applications ASP.NET d'hébergement partagé GoDaddy s'exécutent sous une confiance moyenne, et la création du compteur de performances nécessite probablement une confiance totale, mais la création du compteur de performances n'est pas ce qui échoue ici. (et s'il échouait, il ne se propagerait pas puisque les exceptions de création de perf coutner sont avalées par le code client mySQL).
Au lieu de cela, il échoue en essayant d'accéder à une ressource de chaîne, avant la création du compteur de performances. L'échec est avec cette ligne de code dans Resources.Designer.cs du client MySQL :
return ResourceManager.GetString("PerfMonCategoryName", resourceCulture)
Quelques trucs à essayer, par ordre croissant de difficulté :
-
assurez-vous d'avoir les DLL du client MySQL dans le répertoire BIN de votre application et que vous n'essayez pas de charger la DLL du client à partir du GAC de GoDaddy. Ne dépendez jamais des fichiers binaires fournis par GoDaddy si vous pouvez l'éviter !
-
passez à la culture EN-US afin que le client n'ait pas à rechercher une autre ressource DLL et voyez si le problème disparaît.
-
Créez le client .NET à partir du code source, au lieu de copier les DLL d'une distribution binaire dans le répertoire BIN de votre application. Cela rendra les problèmes comme celui-ci plus faciles à déboguer puisque le code mySQL ne sera pas une boîte noire. Et, à la rigueur, vous permettra de modifier les appels de récupération de ressources problématiques (ou de coder en dur les paramètres régionaux) ! :-)
BTW, au cas où vous seriez tenté de définir "Utiliser Performance Monitor=false" dans votre chaîne de connexion pour essayer d'éviter le problème, ne vous embêtez pas. Le code problématique est exécuté quel que soit ce paramètre :
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);
}
}
}