【问题标题】:Can't access database from local server, but can from remote server无法从本地服务器访问数据库,但可以从远程服务器访问
【发布时间】:2017-03-08 09:14:59
【问题描述】:

我一直在尝试为我的 ASP.NET Core 应用程序设置 SQL Server 2016 Express 实例。我已经达到了可以使用本地开发计算机上的开发版本连接到数据库的地步,但不能使用服务器上的已发布版本(也托管 SQL Server 实例)

我将本地开发版本称为“开发服务器”,将远程发布版本称为“真实服务器”。两台服务器访问同一个 SQL Server 实例

在开发服务器上,我在 appSettings.json 中使用以下 connectionString 毫无问题地连接到 SQL 服务器

Data Source=10.50.70.50;Integrated Security=False;User ID=voetbal;Password=*******;Connect Timeout=15;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False

当我尝试从真实服务器连接时出现错误

SqlException:建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。 (提供者:SQL 网络接口,错误:52 - 无法找到本地数据库运行时安装。验证 SQL Server Express 已正确安装并且本地数据库运行时功能已启用。) 在远程机器上,我在 appsettings.json 和环境变量中都尝试了以下 connectionStrings:

有IP:

Data Source=10.50.70.50;Integrated Security=False;User ID=voetbal;Password=*****;Connect Timeout=15;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False

使用 localhost 而不是 IP:

Data Source=localhost;Integrated Security=False;User ID=voetbal;Password=*****;Connect Timeout=15;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False

使用本地机器名称:

Data Source=WIN-DMM50393I9A;Integrated Security=False;User ID=voetbal;Password=*****;Connect Timeout=15;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False

使用本地机器名称和 SQL 实例名称:

Data Source=WIN-DMM50393I9A\MSSQLLOCALDB;Integrated Security=False;User ID=voetbal;Password=*****;Connect Timeout=15;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False

作为本地数据库:

Data Source=(localdb)\\MSSQLLOCALDB;Integrated Security=False;User ID=voetbal;Password=*****;Connect Timeout=15;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False

然后我想,也许它应该是“服务器”而不是“数据源”,所以我用那个替换再次尝试了它们。还是一样的错误。

所以有些东西告诉我连接字符串不是这里的问题。每当我在互联网上搜索错误时,我只会找到有关人们尝试连接到实际 LocalDB 实例的帖子,而不是 SQL Server Express 实例。如果我的应用确实在尝试连接到 LocalDB 实例,那么为什么我的开发服务器要使用数据库?

我不知道我还能做些什么来解决这个问题。有什么想法吗?

【问题讨论】:

    标签: asp.net sql-server asp.net-core sql-server-express


    【解决方案1】:

    您确定为两个环境定义了 ConnectionString:DEV 和 Production,关于 appsettings.Development.json 和 appsettings.json?

    您能否尝试在服务器上记录连接字符串值:

    string conectionString = Configuration.GetConnectionString("DefaultConnection");
    

    【讨论】:

    • 为了测试我只使用 appsettings.json,它不会被环境特定的 appsettings.json 文件覆盖
    • 请再解释一次。当您尝试从本地计算机连接到托管在“服务器”上的 SQL 实例时遇到问题?
    • 有我的本地开发机器和服务器机器。服务器计算机具有 SQL Server Express。当我在本地开发机器上运行我的 asp.net 应用程序时,该应用程序可以连接到 SQL Server。当我在服务器机器上运行应用程序时,应用程序无法连接到 SQL Server。
    • 您是否尝试使用 Integrated Security=True 选项?
    • @PetarInvanov 原来你是对的。我几乎不好意思告诉你出了什么问题。发布工具正在注入一个带有错误连接字符串的 appsettings.production.json 文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-17
    • 2015-12-07
    • 2018-01-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多