Asp.net core 3.1 webapi iis 8无法连接到sql server



我有asp.net核心3.1 web api。当我在Visual studio中本地运行该项目时,它运行得很好。但是当我将它发布到IIS并运行它时,我会收到错误。

500内部服务器错误"错误":"已成功与服务器建立连接,但在登录前握手过程中发生错误。(提供程序:TCP提供程序,错误:0-远程主机强制关闭了现有连接。("}或者用户domain_name\machine_name登录失败。

连接字符串看起来像这个

"ConnectionStrings": {
"ABCDB": "Server=xxx-test,80;Database=abc;Integrated Security=true;MultipleActiveResultSets=true;"    

},

我已经为.net核心3安装了主机捆绑包。我的应用程序在ApplicationPoolIdentity下运行,ApplicationPoolIdentity被添加到数据库中并具有权限。我的应用程序池设置为"没有ApplicationPoolIdentity的托管代码"。没有连接到数据库的api的端点在发布的版本上工作得很好,但任何连接到数据库上的端点都会出现错误。

我提到了几个链接,但运气不好。https://www.loganfranken.com/blog/1345/why-your-web-application-cant-connect-to-sql-server/

IIS无法将windows凭据传递到用于ASP的SQL Server。NET核心应用

为什么asp.net核心应用程序在连接到SQL Server时使用与AppPool不同的用户身份进行Windows身份验证?

感谢您的帮助。

编辑:唯一对我有用的是在自定义帐户下运行appPool(我的凭据是(,但在IIS 上的appPoolIdentity下不起作用

您的环境似乎需要重置。

1-手动检查IIS下的应用程序文件夹,查看是否可以删除任何缓存文件或类似文件。

2-理想情况下,将其安装在IIS 下的新文件夹中

3-重置IIS

4-对网络浏览器进行硬刷新

您的连接字符串应该是这样的:

"ABCDB": "Data Source=xxx-test;Initial Catalog=abc;Integrated Security=SSPI;Persist Security Info=True;"

并添加您的数据库的安全/用户文件夹的已发布应用程序的应用程序池名称:

IIS APPPOOL<apppool name>

或者在数据库中添加一个新的用户帐户,并附上用户名和密码。在这种情况下,您还必须更改连接字符串。

我也遇到了同样的问题。

  • 其他。NET Core 3.1 web应用程序在同一服务器上的同一IIS实例上使用相同的身份验证方法(匿名身份验证(运行良好,并使用到同一MS SQL DB的相同连接字符串
  • 有一个特别的。NET Core 3.1 web应用程序,IIS导致该应用程序尝试使用用户名{DOMAIN}\{Computer Name}向MSSQL DB进行身份验证

对我来说,问题是有问题的一个应用程序的连接字符串有";Trusted_Connection=True";。

我知道我会用Integrated_Security从IIS获得此身份验证拦截,但没有意识到Integrated_SecurityTrusted_Connection是同义词。

因此,修复方法是从应用程序的DB连接字符串中删除Trusted_Connection=True或Integrated_Security=True如果您的代码需要这两种方法中的任何一种(但在DB连接字符串中提供了用户名和密码(,您可能应该重新评估代码。否则,OP和我观察到的行为应该是你想要发生的,这不是问题。

最新更新