C# .NET Core WebAPI应用程序在本地连接,但在具有SQL网络接口的服务器上失败错误:26定位指定的服务器/实例时出错

C# .NET Core WebAPI应用程序在本地连接,但在具有SQL网络接口的服务器上失败错误:26定位指定的服务器/实例时出错,c#,sql-server,asp.net-core,.net-core,amazon-lightsail,C#,Sql Server,Asp.net Core,.net Core,Amazon Lightsail,我正在开发一个新的应用程序,并尝试使用.NET Core。 在我将应用程序部署到服务器(用于暂存/测试)之前,一切都很好 我编写了一些自定义代码,在其中我尝试/捕获并从WebAPI核心端点返回,这样我就可以使用Postman并查看那里的错误。错误是: “建立到SQL Server的连接时发生与网络相关或特定于实例的错误…(提供程序:SQL网络接口,错误:26-定位指定的服务器/实例时出错)” 我也提前表示歉意,因为我收到的错误消息非常常见,但我确实尝试了许多解决方案,但都无济于事 这是研究的第九

我正在开发一个新的应用程序,并尝试使用.NET Core。 在我将应用程序部署到服务器(用于暂存/测试)之前,一切都很好

我编写了一些自定义代码,在其中我尝试/捕获并从WebAPI核心端点返回,这样我就可以使用Postman并查看那里的错误。错误是:

“建立到SQL Server的连接时发生与网络相关或特定于实例的错误…(提供程序:SQL网络接口,错误:26-定位指定的服务器/实例时出错)”

我也提前表示歉意,因为我收到的错误消息非常常见,但我确实尝试了许多解决方案,但都无济于事

这是研究的第九天,我等不及了。在这里寻求帮助是最后的办法,如果这一问题不能在一天内解决,我将转到.NET Framework。下面是我的一些场景:

机器1:开发机器1,Visual Studio 2017,SSMS 2016 机器2:开发机器2,Visual Studio 2017,SSMS 2008 R2 DB_SERVER1:SQL server 2016 GoDaddy Plesk SERVER2:GoDaddy Plesk共享服务器托管 服务器3:AWS LightSail实例Windows Server 2016,已安装SSMS 2016

仅当服务器2或服务器3尝试连接DB_服务器1时,才会发生此错误

.NET核心本身似乎可以工作,因为端点返回的自定义代码仅在与数据库连接时才会中断。 所以,一开始我遇到了一些麻烦,想知道.NETCore是否安装正确,或者是否存在版本控制问题,等等

我已经完全关闭了防火墙; 我已授予应用程序池管理员权限 尝试在连接字符串中使用端口号

我可以通过SSMS、来自MACHINE1、MACHINE2和SERVER3的sqlcmd与DB_SERVER1连接(没有尝试SERVER2,因为这是Plesk,所以我认为在专用框中尝试会更容易)

该代码还可以从MACHINE1 Visual Studio、MACHINE1本地IIS连接到DB_SERVER1

有趣的侧重点:

当通过FTP/IIS将应用程序发布到服务器时,无论我是否在appsettings.json中更改连接字符串,连接字符串始终相同。它使用我的dev machine1的连接字符串。即使我从项目中的任何地方完全删除了它,不管发生什么,这个原始连接字符串都会显示在部署的appsettings.json中。之后,我总是需要手动更改服务器上的连接字符串以进行尝试,这并不重要,因为结果总是一样的,就像连接字符串从未更改一样。由此产生的错误消息肯定来自连接字符串从未更改的情况

这里有什么模糊的缓存吗?来自IIS、AWS、.net核心

DB_SERVER1在防火墙、端口等方面没有问题,因为正如刚才所述,我可以通过多种途径、工具和我的dotnet核心代码本身连接到它

我还缺什么

我已经在SERVER3上安装了dotnet核心运行时。 因此,应用程序运行时,它会轰炸与数据库的连接。 它确实使用实体框架,我首先使用dotnet命令生成模型数据库。 那么,任何缺少的EF组件是否会导致错误26

好的,我在这里停下来,祈祷能找到丢失的分号的任何想法

我已经尝试了很多解决方案,这里有三个与我遇到的问题非常接近的例子

还有很多人已经尝试过了

在appsettings.json中

"DefaultConnection": "Server=xxx.xx.xxx.x;Database=dbname;Trusted_Connection=False;MultipleActiveResultSets=True;User ID=username;Password=password"
在startup.cs中

services.AddDbContext(
option=>option.UseSqlServer(Configuration.GetConnectionString(“DefaultConnection”));
服务附加性(
选项=>
{
option.Password.RequireDigit=false;
option.Password.RequiredLength=6;
option.Password.RequireNonAlphanumeric=false;
option.Password.RequireUppercase=false;
option.Password.RequireLowercase=false;
}).AddEntityFrameworkStores()
.AddDefaultTokenProviders();

我猜您的问题与.net核心环境有关,当您发布应用程序时,它会在开发环境中发布,因为无论发生什么情况,它都会使用您的开发连接字符串


另外,请看我附上的截图,在发布之前,请尝试在此处更改连接字符串,并查看是否能够连接到数据库

我猜您的问题与.net核心环境有关,并且当您发布应用程序时,它将在开发环境中发布,因为它正在使用您的开发连接字符串什么

另外,请看我附加的屏幕截图,在发布之前尝试在此处更改连接字符串,看看是否能够连接到数据库

问题在于您的Sql Server首先打开Sql Server并 连接到远程数据库检查您是否能够连接 或者不是因为错误代码清楚地表明这是一个连接 问题如果未连接,则必须配置sql 服务器以及来自防火墙的1433端口

问题在于您的Sql Server首先打开Sql Server并 连接到远程数据库检查您是否能够连接 或者不是因为错误代码清楚地表明这是一个连接 问题如果未连接,则必须配置sql 服务器以及来自防火墙的1433端口


我解决了这个问题。嗯,差不多。不幸的是,我不确定这是什么,但看起来好像是服务器配置的问题。我将应用程序发布到一个新的Azure envir