System.Data.SqlClient.SqlException(0x80131904)-与网络相关...(仅在本地主机上)

时间:2019-04-03 17:34:17

标签: c# asp.net-core sql-server-2012 iis-7.5 asp.net-core-2.1

我正在首次使用Windows身份验证在ASP.NET Core 2.1中开发应用程序。

我一直在开发机器,并连接到托管该应用程序SQL Server数据库的远程服务器。

appsettings.json文件中设置连接字符串,如下所示:

"DefaultConnection": "Server=V-APPSRV01;Database=devHub;Integrated Security=True;Trusted_Connection=True;MultipleActiveResultSets=true"

在开发过程中,使用连接,CRUD或其他方式处理应用程序时,我没有任何问题。

当我将发布版本部署到同时承载IIS服务器和SQL服务器的服务器(与开发期间使用的服务器相同)时,出现此错误:

  

System.Data.SqlClient.SqlException(0x80131904):建立与SQL Server的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称正确,并且已将SQL Server配置为允许远程连接。 (提供者:命名管道提供者,错误:40-无法打开与SQL Server的连接)---> System.ComponentModel.Win32Exception(53):找不到网络路径

此外,当连接到SQL Server(带有SSMS)时,我可以从网络中的任何计算机以及本地计算机进行连接。

该网站可以运行,但是当我执行EnsureCreated()时,它会抛出该错误,当然,在我尝试对数据进行CRUD的任何地方,它都会执行相同的操作。

该服务器是Windows Server 2018 R2 SP1,带有IIS 7.5和SQL Server 2012(v11.0.2218.0)。

本地开发机是运行IIS Express的Windows 10。

我已经按照Microsoft docs设置了应用程序的身份验证。

以及配置连接字符串时的此article

此外,我阅读并实施了关于此article的建议。

public class Program
{
    public static void Main(string[] args)
    {
        var host = CreateWebHostBuilder(args).Build();

        using (var scope = host.Services.CreateScope())
        {
            var services = scope.ServiceProvider;

            try
            {
                var context = services.GetRequiredService<PEXContext>();
                context.Database.EnsureCreated();
            }
            catch(Exception ex)
            {
                var logger = services.GetRequiredService<ILogger<Program>>();
                logger.LogError(ex, "An Error occurred creating the DB.");
            }
        }

        host.Run();
        // CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseStartup<Startup>();
}

问题似乎在本地连接到数据库。

按预期方式远程工作:

  • 它使用Windows身份验证连接到数据库
  • 在数据库为空时(重新)创建数据库
  • 并在其控制器创建的表上执行CRUD

如果我没有在两台计算机上都使用相同的数据库,并且问题又得到了解决(在本地而不是在远程工作),我会说这是连接字符串或防火墙规则,但是没有。

>

0 个答案:

没有答案
相关问题