MySql データベースから SQL Express データベースにデータをインポートしようとする小さなアプリケーションがあります。これは、Windows 10 上の Visual Studio 2013 で開発中であり、Entity Framework Database First を使用して MySql データベースをモデル化し、それに接続してデータを取得します。
ソフトウェアはTDDで開発されているため、アプリケーションがMySqlデータベースに正常に接続してそこからデータを取得できることを確認するNUnitテストがあります。1 つのテストは、次のように非常に単純です。
[Test]
public void MySqlContext_CanConnectToLegacyDb_OpensWithoutErrors()
{
// Arrange
using (MySqlContext legacyRepository = new MySqlContext())
{
bool exceptionThrown = false;
List<string> exceptionMessages = new List<string>();
// Act
try
{
legacyRepository.Database.Connection.Open();
}
catch (Exception ex)
{
exceptionThrown = true;
exceptionMessages.Add(ex.Message);
while (ex.InnerException != null)
{
ex = ex.InnerException;
exceptionMessages.Add(ex.Message);
if (ex is SocketException)
{
exceptionMessages.Add(string.Format("ErrorCode={0}", (ex as SocketException).ErrorCode));
}
}
}
// Assert
StringBuilder errMsg = new StringBuilder("Exception was thrown: ");
foreach(string em in exceptionMessages)
{
errMsg.AppendLine(em);
}
Assert.IsFalse(exceptionThrown, errMsg.ToString());
}
}
すなわち。例外がスローされることなく、MySql データベースへの接続を開くことができることを確認しているだけです。
このテストは失敗しています。MySql データベースを開こうとすると、次の例外が発生します。
結果メッセージ: 例外がスローされました: トランスポート接続からデータを読み取ることができません: 確立された接続は、ホスト マシンのソフトウェアによって中止されました。確立された接続がホスト マシンのソフトウェアによって中止されました ErrorCode=10053
予想: False だった: True
MySql は、このテストとそれがサポートしているアプリケーションと同じマシンで実行されています。これは、同じ Visual Studio インスタンスの MySql Workbench やサーバー エクスプローラーなど、マシン上の他のソフトウェアによって使用されており、接続の問題はありません。データベースへのアクセスに使用されている接続文字列を確認して再確認しましたが、データベースのモデルを生成したときに Entity Framework によって生成されたものと同じです。
この例外についてオンラインで読んだ内容に基づいて、Windows 10 のすべてのセキュリティ設定を徹底的にチェックし、Windows イベント ログを含む MySql ログとその他のログを確認しました。MySql との接続を中止しているものを示唆するログは何も見つかりません。問題のあるコード行が失敗した場合、Fiddler は何も表示しないため、localhost/127.0.0.1 接続を介して MySql と通信しようとしている証拠は何もありません。
見つけた設定を無効にし、BitDefender ウイルス対策ソフトウェアで無効にしようとしましたが、これらのアクションのいずれもこのエラーに影響しません。
このエラーの原因を見つけるために、他に何を確認できますか? Windows 内のセキュリティ設定でしょうか?
いくつかの詳細情報: EF データベースについて他の場所で読んだことによってプロンプトが表示されました。最初に、MySql モデルをソリューションから削除して再度追加し、接続文字列に何か変更があったかどうかを確認しました。今度は、[データ接続の選択] 画面 (3 番目の画面) で [次へ] をクリックすると、ADO.NET Entity Data Model ウィザードがエラーなしで終了します。これが行われると、MySql データベースへのサーバー エクスプローラー接続が閉じられます (アイコンが緑のプラグを示していた場合、アイコンは赤い十字を示します)。
私は今、私のソリューションのどこかに、構成上の問題があると考えています。しかし、問題をどのように診断するのでしょうか? ウィザードが終了してもエラー メッセージは表示されず、出力ウィンドウには何も表示されません。
別の更新:
問題は、MySql 構成の問題にある可能性があると思います。MySql 用に 2 つまたはおそらく 3 つの「my.ini」設定ファイルがあるようですが、MySQL Workbench によって維持されているファイルは、サーバーが実際に構成に使用しているファイルではないと思われます。なぜ私はこれを考えるのですか?デフォルトではログに記録されないさまざまな項目のログを有効にしても (なぜでしょうか?)、動作に変化はありませんでした。C:\Program Files\MySQL\MySQL Server 5.5\my.ini
MySql はログ ファイルの書き込みを開始しませんでした - ユーティリティ ( )によって変更された my.ini ファイルを .ini 内のファイルにコピーするまではC:\ProgramData\MySQL\MySQL Server 5.5
。それを行った後、MySQL はログの記録を開始しましたが、Workbench 経由でサーバーに正しく接続できませんでした。
私はさらに調査しており、他の誰かが同様の問題を抱えている場合に備えて、ここに見つけたものを投稿します.