0

我有一个小型应用程序,它试图将数据从 MySql 数据库导入 SQL Express 数据库。这是在 Windows 10 上的 Visual Studio 2013 中开发的,使用 Entity Framework Database First 对 MySql 数据库进行建模,连接到它并检索数据。

该软件正在开发 TDD,所以我有一个 NUnit 测试,它正在检查应用程序是否可以成功连接到 MySql 数据库并从中检索数据。一项测试很简单,如下:

[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());
  }
}

IE。它只是检查它是否可以打开与 MySql 数据库的连接,而不会引发任何异常。

这个测试失败了。尝试打开 MySql 数据库会产生以下异常:

结果消息:抛出异常:无法从传输连接读取数据:已建立的连接被主机中的软件中止。已建立的连接被主机中的软件中止 ErrorCode=10053

预期:假但是:真

MySql 与此测试及其支持的应用程序在同一台机器上运行。机器上的其他软件正在使用它,包括 MySql Workbench 和同一 Visual Studio 实例的服务器资源管理器,没有任何连接问题。我已经检查并重新检查了用于访问数据库的连接字符串,它与实体框架在为数据库生成模型时生成的连接字符串相同。

根据我在网上阅读的有关此异常的内容,我已经彻底检查了 Windows 10 上的所有安全设置,我查看了 MySql 日志和其他日志,包括 Windows 事件日志。我在任何日志中都找不到任何提示正在中止与 MySql 的连接的内容。当有问题的代码行失败时,Fiddler 不会显示任何内容,因此我看不到任何证据表明任何试图通过 localhost/127.0.0.1 连接与 MySql 对话的证据。

我尝试禁用那些我能找到的设置,并通过 BitDefender 防病毒软件禁用,但这些操作都不会对此错误产生任何影响。

我还可以检查什么来找出这个错误的原因?它可能是 Windows 中的安全设置吗?

一些进一步的信息: 由我在其他地方读到的关于 EF 数据库的内容提示,我尝试从我的解决方案中删除 MySql 模型并重新添加它,看看这是否改变了连接字符串中的任何内容。这一次,当我在“选择您的数据连接”屏幕(第 3 个屏幕)上单击“下一步”时,ADO.NET 实体数据模型向导终止,没有任何错误。当它执行此操作时,与 MySql 数据库的服务器资源管理器连接关闭(该图标显示一个红色十字,当它显示一个绿色插头时)。

我现在认为在我的解决方案中某处存在一些配置问题。但是如何诊断问题呢?当向导死去时,我没有收到任何错误消息,并且“输出”窗口什么也没有显示。

另一个更新: 我认为问题可能归结为 MySql 配置问题。我似乎有 2 个或可能 3 个用于 MySql 的“my.ini”设置文件,我怀疑 MySQL Workbench 维护的那个不是服务器实际用于其配置的那个。为什么我会这样想?因为,当我为默认未记录的各种项目启用日志记录时(为什么不记录?),行为没有发生任何变化。MySql 没有开始写入日志文件——直到我将已被实用程序 ( C:\Program Files\MySQL\MySQL Server 5.5\my.ini)更改的 my.ini 文件复制到C:\ProgramData\MySQL\MySQL Server 5.5. 在我这样做之后,MySQL 开始记录内容,但随后我无法通过 Workbench 正确连接到服务器。

我正在进一步调查,并将在此处发布我发现的内容,以防其他人遇到类似问题。

4

0 回答 0