奇妙なもの。 GoDaddy共有ホスティングASP.NETアプリは中程度の信頼の下で実行され、パフォーマンスカウンターの作成にはおそらく完全な信頼が必要ですが、パフォーマンスカウンターの作成はここで失敗しているわけではありません。 (失敗した場合、perf coutner作成の例外がmySQLクライアントコードに飲み込まれるため、伝播されません)。
代わりに、perfカウンターを作成する前に、文字列リソースにアクセスしようとして失敗します。失敗は、MySQLクライアントのResources.Designer.csの次のコード行にあります:
return ResourceManager.GetString("PerfMonCategoryName", resourceCulture)
難易度の高い順に、試すべきいくつかのこと:
-
アプリのBINディレクトリにMySQLクライアントDLLがあり、GoDaddyのGACからクライアントDLLを読み込もうとしていないことを確認してください。回避できる場合は、GoDaddyが提供するバイナリに依存しないでください!
-
EN-USカルチャに切り替えて、クライアントが別のリソースDLLを探しに行く必要がないようにし、問題が解決するかどうかを確認します。
-
DLLをバイナリディストリビューションからアプリのBINディレクトリにコピーするのではなく、ソースコードから.NETクライアントを構築します。 mySQLコードはブラックボックスではないため、これにより、このような問題のデバッグが容易になります。そして、ピンチで、問題のあるリソースフェッチ呼び出しを変更(またはロケールをハードコーディング)できるようになります! :-)
ところで、問題を回避するために接続文字列に「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);
}
}
}