Bre*_*boy 10 c# sql-server asp.net asp.net-core windows-server-2019
我在 Server 2008 计算机上有许多 .NET Web 应用程序,我正尝试将它们迁移到 Server 2019 计算机,其中一些应用程序在移动它们后让我无法连接到另一台服务器上的 SQL Server 2016 实例。
我得到的错误是
System.Data.SqlClient.SqlException (0x80131904):建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(provider: SQL Network Interfaces, error: 25 - Connection string is not valid) ---> 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 的连接对这个用户工作正常,但不是来自网络应用程序。
Edit2:经过更多测试,如果混合使用Server 2019,这绝对是可以做的。从 2019 应用服务器到 2019 数据库服务器失败。从 2008 年应用程序服务器到 2019 年数据库服务器失败。从 2019 年应用程序服务器到 2016 年数据库服务器失败。从 2008 app server 到 2016 db server 成功。
编辑3:我觉得我在这里发疯了。其中一个应用程序,我尝试将 ASPNETCORE_ENVIRONMENT 更改为 Development 以便我可以在屏幕上看到更详细的错误,因此我将 appsettings.Development.json 设置为与 appsettings.Production.json 完全相同,然后连接工作!将它切换回生产它再次得到错误。整个文件是完全相同的文本。这还有什么意义?我什至尝试将环境变量显式设置为 Production 而不是让它选择它作为默认值。
编辑 4:我已经解决了我现在遇到的一半问题。无论出于何种原因,我一开始从其中一个电子表格复制的连接字符串中包含疯狂的隐藏字符,这就是为什么它说 sql server 不存在的原因。我在任何编辑器中都看不到它们,只能通过 VS Code 比较找到它,说该行不同,但没有看到任何区别,我将其分成块并找到了位置。我们发现当我们在写字板中打开它时,这是唯一可以显示它的地方,见下文。

我相当确定解决方案是从连接字符串中删除实例名称...
"Server=mysqlserver,3050;Database=Idea;Trusted_Connection=True;"
Run Code Online (Sandbox Code Playgroud)
“指定端口时无需指定实例名称。”
| 归档时间: |
|
| 查看次数: |
869 次 |
| 最近记录: |