【发布时间】:2020-10-11 21:43:47
【问题描述】:
我在尝试建立与我在 ASP.NET Core MVC 3.1 中使用 Windows Server 2019 设置的服务器的连接时遇到问题。
我在服务器上安装的唯一东西是 MySQL 套件和 IIS。该服务器也使用 VirtualBox 在我的计算机上本地托管,并使用桥接适配器进行设置。
ASP.NET Core MVC 项目是使用 Visual Studio 中的默认 MVC 选项创建的。此处不包含第三方服务。
在 ASP.NET Core 中,连接字符串如下所示:
"ConnectionStrings": {
"ApplicationContext": "Server=<server IP/host name>;Initial Catalog=testdatabase;User ID=testuser;Password=testpassword;"
}
使用上述连接字符串运行项目时,我的浏览器中出现以下错误:
Win32Exception: 系统找不到指定的文件。未知 位置
SqlException:建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器是 未找到或无法访问。验证实例名称是否为 正确,并且 SQL Server 配置为允许远程连接。 (提供者:TCP 提供者,错误:0 - 连接尝试失败 因为连接方在一段时间后没有正确响应 时间,或建立连接失败,因为连接的主机有 没有回应。) Microsoft.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, uint waitForMultipleObjectsTimeout, bool allowCreate, bool onlyOneCheckConnection, DbConnectionOptions userOptions, out DbConnection内部连接)
但是,我终其一生都无法弄清楚为什么这不起作用。我已经浏览了很多互联网,但对 ASP.NET 如何与 MySQL 服务器交互以及我是否使用了不正确的参数知之甚少。我试过使用额外的参数,比如Trusted_Connection=True/False;
和MultipleActiveResultSets=True/False; 希望产生任何不同的结果,但仍然没有(我特别提到这两个,因为它们是默认出现的)。
为了测试服务器是否是罪魁祸首,我使用带有 PDO 的 PHP v7 复制了上面的连接字符串。
<?php
$server = "<server IP/host name>";
$port = 3306;
$db = "testdatabase";
$username = "testuser";
$password = "testpassword";
try {
$conn = new PDO("mysql:host=$server;port=$port;dbname=$db", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Connected";
} catch (PDOException $err) {
echo $err;
}
if ($conn) {
$query = "SELECT * FROM testTable";
$result = $conn->query($query);
} else {
echo "Query failed";
}
foreach ($entity as $result) {
echo "<br />" . $result["Id"];
}
?>
我可以确认这个 PHP 代码 100% 工作。
此外,我还测试了使用 Azure MySQL 以及使用在 Azure 中创建的生成的连接字符串来建立服务器连接。这也 100% 有效。
这让我相信我的 Windows Server 是罪魁祸首,它可能与一项或多项特定服务被禁用/阻止有关。但同时,如果PHP代码能够建立连接并抓取数据,那肯定不会是Connection String代码造成的吧??
我认为这个问题可能与我的控制器代码中的逻辑有关。
如果有人能提供一些见解,我将不胜感激。它可能只是超级简单的东西。
【问题讨论】:
-
糟糕,忘记在 JSON ConnectionString 中将“,3306”附加到“Server=”。这应该可以消除我发布的第二个错误。
-
当您说“服务器”时...我可以理解为您的意思是“MySQL 服务器”吗?如果是这样,那么我认为您的 .NET 连接字符串可能是错误的。它看起来像 MS SQL Server 数据库的连接字符串。 connectionstrings.com/mysql 可能会帮助您找到正确的连接字符串格式。我们还可以看到您在应用程序中用于与数据库通信的实际代码吗?
-
“我认为这个问题可能与我的控制器代码中的逻辑有关”...您认为向我们展示这一点并描述您的预感是一个好主意吗?
-
还有什么原因导致“找不到文件”错误?您没有包含任何行号或代码引用来指向发生错误的位置。你试过调试它吗?
-
P.S.您决定安装一个单独的 virtualbox 实例而不是直接在您的 PC 上安装 MySQL 有什么特别的原因吗?这对于开发/测试目的来说会简单得多。另外... .NET 代码是在 virtualbox 实例中运行,还是在您的主操作系统中运行(可能通过 Visual Studio)?这并不完全清楚。
标签: c# mysql asp.net-core connection-string windows-server