只有在使用IIS Express或Kestrel时,Dotnet核心应用程序才能使用IIS连接到SQL Server

问题描述 投票:1回答:3

我有一个.NET Core Web应用程序从SQL Server中获取一些数据。我通过互联网连接到SQL Server。

当我使用IIS Express或Kestrel运行应用程序时,我可以连接到数据库服务器并检索数据。我也可以使用SQL Server Management Studio成功连接到数据库服务器。

这是我正在使用的连接字符串:

"ConnectionStrings": {
    "DefaultConnection": "Server=my-sql-server.someurl.com; Initial Catalog=my-sql-database; User ID=my-user-id; Password=my-password;"
}

但是,当我尝试在同一台机器上运行同一个网站时,在IIS中,我收到以下错误消息:

SqlException:建立与SQL Server的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确,以及SQL Server是否配置为允许远程连接。 (提供者:TCP提供者,错误:0 - 没有这样的主机。)

我怀疑这与dotnet核心/ IIS组合有关,而不是防火墙/网络/身份验证问题,但我可能错了。

sql-server iis .net-core ef-core-2.0
3个回答
1
投票

问题很简单,我正在查看错误的连接字符串。

我有appsettings.json包含一个连接字符串和appsettings.Production.json包含另一个。

使用IIS Express或Kestrel运行应用程序时,会使用第一个应用程序,但是当我发布应用程序然后在IIS下运行它时,环境将设置为“生产”,而使用生产设置。

问题是生产连接字符串指向不再存在的数据库服务器。


0
投票

您需要在sql server上启用TCP / IP协议。请使用以下链接:Why am I getting "Cannot Connect to Server - A network-related or instance-specific error"?


0
投票

我通过在网站应用程序池中添加LocalSystem到Identity来解决了这个问题。

脚步:

  1. 选择网站应用程序池
  2. 右键单击并单击“高级设置”
  3. 单击Identity,然后将其更改为LocalSystem
© www.soinside.com 2019 - 2024. All rights reserved.