ASP.NET核心 - 发布后应用程序未连接到数据库

时间:2017-03-16 17:48:44

标签: asp.net sql-server iis connectivity

我使用用户身份验证创建了一个简单的ASP.Net Core应用程序(因此所有Entity Framework都已预先加载到Web应用程序模板中)。它使用位于我的connectionString文件中的appsettings.json连接到我的数据库,并设置了"data source = {computerName}\\{serverName}"

数据库实例和Visual Studio位于同一台计算机上。在开发和调试模式下,这可以很好地将数据返回到web api。当我发布它并尝试从域名转到该站点时,它允许我查看不需要数据库连接的网页,但其他需要数据库数据的网页返回如下页面:

  

错误。
  处理您的请求时发生错误。   发展模式   交换到开发环境将显示有关发生的错误的更详细信息。

     

不应在部署中启用开发环境   应用程序,因为它可能导致敏感信息   向最终用户显示例外情况。对于本地调试,   可以通过设置启用开发环境   ASPNETCORE_ENVIRONMENT环境变量到开发,和   重新启动应用程序。

我试图将ASPNETCORE_ENVIRONMENT的环境变量从开发更改为生产,但没有成功。

我已尝试在我的appsettings.Production.json文件中将publishOptions添加到project.json,即使没有文件appsettings.Production.json,这也无济于事。 dotnet publish

web.config文件中添加环境变量无效Deployment

我需要帮助将已发布的web api从开发Visual Studio设置外部连接到我的SQL Server数据库。

我能想到的最后一件事是,我对连接字符串的理解可能不正确。如果web api使用连接字符串从服务器端连接到数据库,那么它应该像开发时调用http://localhost:port#一样工作,因为它们都在同一台机器上。但是,如果数据库字符串需要基于客户端调用,则必须使用域名和IP地址。 有人能告诉我它是哪一个吗?

唯一想到的是,我在IIS管理器中没有做什么,需要做什么。我也看到了连接字符串,但由于连接字符串在应用程序内部,所以不确定它是什么。也许我想给应用程序一些授权与数据库服务器通信,即使它们在同一台机器上???

1 个答案:

答案 0 :(得分:8)

经过大量研究,最后搜索“如何在iis中部署web api”我能够从Host ASP.NET Web API in IIS using Visual Studio Publish学到我需要添加安全实体BUILTIN \ IIS_IUSRS。然后将映射放到我的数据库表中,并将数据库的db_datareader(可能还有db_datawriter)提供给IUSER,以允许从我自己托管的IIS web api进行访问。这来自上面提到的链接部分陈述

  

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