ASP.NET Core - 发布后应用程序无法连接数据库

11
我创建了一个简单的ASP.Net Core应用程序,具有用户身份验证功能(因此所有的Entity Framework都已预先加载到Web应用程序模板中)。它使用位于我的appsettings.json文件中的connectionString连接到我的数据库,并设置为"data source = {computerName}\\{serverName}"。
数据库实例和Visual Studio位于同一台机器上。在开发和调试模式下,这可以很好地返回数据到Web API。当我将其发布并尝试从域名访问该站点时,它允许我查看不需要数据库连接的网页,但需要从数据库获取数据的其他页面会返回如下错误页面:
错误。 处理您的请求时出错。 开发模式 切换到开发环境将显示有关所发生错误的详细信息。
部署的应用程序不应启用开发环境,因为它可能导致敏感信息从异常中显示给最终用户。对于本地调试,可以通过将ASPNETCORE_ENVIRONMENT环境变量设置为Development并重新启动应用程序来启用开发环境。
我尝试将ASPNETCORE_ENVIRONMENT的环境变量从Development更改为Production,但没有成功。
我尝试将 appsettings.Production.json 添加到 project.json 文件的 publishOptions 中,即使没有 appsettings.Production.json 文件,但这并没有帮助。dotnet publishweb.config 文件中添加环境变量也没有起作用。Deployment 我需要帮助让已发布的 Web API 能够从开发 Visual Studio 设置之外连接到我的 SQL Server 数据库。
我能想到的最后一件事是,也许我对连接字符串的理解不正确。如果 Web API 使用连接字符串从服务器端连接到数据库,则应该像在开发阶段调用 http://localhost:port# 时一样正常工作,因为它们都在同一台机器上。但是,如果数据库字符串需要基于客户端调用,则必须使用域名和 IP 地址。
有人能告诉我是哪一个吗?
唯一想到的其他事情是,我可能没有在 IIS 管理器中做某些需要做的事情。我在那里看到了连接字符串,但不确定它是用来做什么的,因为连接字符串在应用程序中。也许我应该给应用程序一些授权,让它与数据库服务器通信,即使它们在同一台机器上?
1个回答

11
经过多次研究,最终在搜索“如何在iis中部署web api”后,我从使用Visual Studio发布将ASP.NET Web API托管在IIS中中了解到,我需要添加安全实体BUILTIN\IIS_IUSRS。然后将我的数据库表映射并授予db_datareader(以及可能的db_datawriter)权限,允许自托管的IIS Web API访问来自我的IUSER的数据库。以上内容来自上述链接,其中的一部分声明为:

在IIS APPPOOL\ASP.NET v4.0下访问数据库。 因为我们使用ASP.NET v4.0应用程序池,请确保将IIS APPPOOL\ASP.NET v4.0添加到您的数据库服务器->安全性->登录。


谢谢您分享您的解决方案。它对我很有帮助。我所要做的就是将BUILTIN\IIS_IUSRS添加到我的数据库登录中,并赋予读/写权限。 - nam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接