我正在尝试迁移到 Server 2019 机器的 Server 2008 机器上有许多 .NET Web 应用程序,其中一些在移动它们后给我连接到另一台服务器上的 SQL Server 2016 实例的问题。
我得到的错误是
System.Data.SqlClient.SqlException (0x80131904):建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供者:SQL 网络接口,错误:25 - 连接字符串无效)---> System.ComponentModel.Win32Exception (87):参数不正确
这是一个 .NET Core 2.2 Web 应用程序。(安装在服务器上的.net core 2.2 服务器包)连接字符串类似于“Server=mysqlserver\myinstance,3050;Database=Idea;Trusted_Connection=True;” 并且正在使用 Entity Framework/DbContext 进行连接。
IIS 中的应用程序为此应用程序创建了一个应用程序池,设置与在旧服务器上运行的相同:无托管代码,身份设置为域用户“域\用户”。
从新的应用程序服务器 ping 到数据库服务器工作正常。在新服务器上以域用户身份运行 SSMS 可以正常连接数据库,并且可以通过管理工作室查看数据。
所以我不知道 Server 2019 在尝试连接 SQL Server 的方式上是否有什么不同?几天来我一直在努力解决这个问题。.NET 4.0 应用程序在尝试连接到同一实例上的其他数据库时也会遇到相同的错误。
奇怪的是,其他一些应用程序工作正常,连接到不同服务器上的不同 SQL 2016 实例,但它们也是不同的 .net 版本,如较旧的 .NET 4.0 Web 应用程序,但它们作为具有不同域的应用程序池运行占每个应用程序罚款。
似乎此服务器上的所有 .NET Core 或 .net 4.0 Web 应用程序都无法从该服务器连接到这个数据库实例,但在旧的 Web 应用程序服务器上它们工作正常。
还有什么我可以检查的想法吗?
编辑:我发现错误实际上是在连接到新的 SQL Server 时,即使从旧的应用程序服务器它仍然会收到相同的错误。我在这个应用程序中有 2 个连接,所以我以为是第一个,但实际上是第二个。所以这更多地与新的 SQL 服务器实例有关。同样,来自 SSMS 的连接适用于此用户,但不适用于 Web 应用程序。
编辑 2:经过更多测试,如果有 Server 2019 混合使用,那肯定是可以做的。从 2019 应用服务器到 2019 数据库服务器失败。从 2008 应用服务器到 2019 数据库服务器失败。从 2019 应用服务器到 2016 数据库服务器失败。从 2008 应用服务器到 2016 数据库服务器成功。
编辑3:我觉得我在这里要疯了。其中一个应用程序,我尝试将 ASPNETCORE_ENVIRONMENT 更改为 Development 以便我可以在屏幕上看到更详细的错误,因此我将 appsettings.Development.json 设置为与 appsettings.Production.json 完全相同,然后连接正常!将其切换回生产环境再次出现错误。整个文件是完全相同的文本。这有什么意义呢?我什至尝试将环境变量显式设置为生产,而不是让它作为默认设置。
编辑4:我已经解决了我现在遇到的一半问题。无论出于何种原因,我一开始从其中一个电子表格中复制的连接字符串中包含疯狂的隐藏字符,这就是为什么它说 sql server 不存在的原因。我在任何编辑器中都看不到它们,只有通过 VS Code 比较发现它说行不同但没有看到任何差异,我将它分成块并找到了位置。当我们在写字板中打开它时,我们发现这是唯一会显示它的地方,见下文。