首页 > 解决方案 > 如何为不同的数据库配置具有不同 url/端口的 ASP.NET Core 2 应用程序

问题描述

我正在尝试在具有两个不同 url/端口的同一 IIS 服务器中配置 ASP.NET Core (2.1) 应用程序,每个 url/端口应使用不同的数据库连接,例如:

  1. http://localhost:55001(使用 QA DB 连接)
  2. http://localhost:55002(使用生产数据库连接)

此方案适用于使用 Intranet Web 应用程序。一组用户将使用 Production 应用程序。另一组用户将使用 QA 或 Staging 应用程序。这两个 urls/db-connections 必须同时在同一个应用程序中启用,以便拥有一个主应用程序(用于策略、维护和机器资源消耗目的)和两个不同的数据库。

我尝试的是配置两个 appsettings.json 文件:第一个 (appsettings.Release.json) 设置生产数据库连接字符串和 applicationUrl url/端口。第二个(appsettings.QA.json)定义了不同的数据库连接字符串和不同的applicationUrl。

appsettings.Release.json:

{
  "ConnectionStrings": {
    "default": {
      "ConnectionString": "<production-connection-string>",
      "ProviderName": "Oracle.ManagedDataAccess.Client"
    }
  },
"applicationUrl": "https://localhost:55001",
...
}

appsettings.QA.json:

{
  "ConnectionStrings": {
    "default": {
      "ConnectionString": "<qa-connection-string>",
      "ProviderName": "Oracle.ManagedDataAccess.Client"
    }
  },
"applicationUrl": "https://localhost:55002",
...
}

现在在这里我有点迷茫,我需要实现的下一个配置设置对我来说很混乱并且不清楚。我什至不知道我想要实现的目标是否可行或可接受。如果我为每个 appsettings[environment/scenario].json 定义一个 ASPNETCORE_ENVIRONMENT 变量值,那么我不能同时为这个变量使用两个值,对吧?

所以我认为设置和使用 ASPNETCORE_ENVIRONMENT 可能不是我的问题的答案。此外,我必须正确配置启动和(也许)程序类来实现我正在寻找的东西。

在这一点上,你们可能拥有的任何建议、指导、代码片段或解决方案都将不胜感激。

标签: asp.net-coreiisapp-config

解决方案


我认为您的问题基本上归结为如何为ASPNETCORE_ENVIRONMENT每个应用程序实例设置不同的值。对于 IIS 部署,您最好的选择是在 web.config中添加一个<environmentVariables>部分:<aspNetCore>

<aspNetCore ...>
    <environmentVariables>
        <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Staging" />
    </environmentVariables>
</aspNetCore>

要在发布时为您自动处理,您需要.pubxml为您的发布配置文件修改并添加如下内容:

<PropertyGroup>
    <EnvironmentName>Staging</EnvironmentName>
</PropertyGroup>

这将<environmentVariables>在发布时自动将相关设置添加到生成的 web.config 中。

有关详细信息,请参阅:https ://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/aspnet-core-module?view=aspnetcore-2.2#configuration-with-webconfig


推荐阅读