代码之家  ›  专栏  ›  技术社区  ›  S. Pineau

设置与iis上的网站关联的环境变量

  •  0
  • S. Pineau  · 技术社区  · 7 年前

    我参与asp中的网站开发。visual studio上的net core。我们创建了一个网站,该网站应分为多个实例。对于这段代码,我只有一个代码和一个发布配置文件(我不想有多个发布配置文件,只想更改一个参数)。

    所有这些网站共享相同的数据库连接,客户端。json和web。配置。我通过实例来区分所有这些网站。我不想将此实例放在客户端中。json,因为它是共享的。 所有这些网站都由一个应用程序池支持。我不知道这是否是一个好主意,我们遵循此过程以帮助维护(例如,只有一个池可以在更新时重新启动)。

    我找到的解决方案是向iis中的每个网站添加一个环境变量(请参阅 Publish to IIS, setting Environment Variable ).正如NickAb所说,我凌驾于我的客户之上。将值为的json添加到环境变量中( system.webServer/aspNetCore 进入 Configuration editor 在iis上)。它起作用了。

    我的问题是:我有一个在多个服务器上发布的多个网站的代码。我不想手动对每个网站和服务器进行此更新!

    我开发了一个中间件,它使用 Microsoft.Web.Administration

    因此,我搜索如何使用此库向这些网站添加环境变量。

    我已经尝试过这种方法: Environment Variables

    两个问题: -我有IIS 10和8(此解决方案显然只适用于IIS 10) -代码是有效的(我的意思是,我也不例外),但我无法在网站上看到结果 系统Web服务器/aspNetCore Configuraton editor 在iis中。

    这个解决方案好吗?如果是,我错过了什么?

    提前感谢您的帮助。

    1 回复  |  直到 7 年前
        1
  •  2
  •   S. Pineau    7 年前

    经过更多的研究,我找到了自己的路。

    如下所示,我发现了如何将新的环境变量添加到我的网站(这里是test.fr)中 ApplicationHost.config 文件这 link 帮助我了解 Microsoft.Web.Administration 这方面的工作。

    IIS Configuration Editor / system.webServer/aspNetCore

    下面是我使用的代码:

    using Microsoft.Web.Administration;
    using System;
    using System.Collections.Generic;
    
    internal static class Sample
    {
        internal static void AddEnvironmentVariablesToWebSite(this ServerManager serverManager, KeyValuePair<string, string> environmentVariable, string siteName)
        {
            if (serverManager == null) throw new ArgumentNullException(nameof(serverManager));
    
            var config = serverManager.GetApplicationHostConfiguration();
            var aspNetCoreSection = config.GetSection("system.webServer/aspNetCore", siteName);
            var environmentVariablesCollection = aspNetCoreSection.GetCollection("environmentVariables");
    
            var addElement1 = environmentVariablesCollection.CreateElement(); // CreateElement() is equivalent to CreateElement("add")
            addElement1["name"] = environmentVariable.Key;
            addElement1["value"] = environmentVariable.Value;
            environmentVariablesCollection.Add(addElement1);
            serverManager.CommitChanges();
        }
    }
    

    我在 commitChanges() 将我的站点和池创建到iis中,并将其添加到 ApplicationHost。配置 文件

    感谢@Lexli blog ,在 commitChanges() 因为它在更改生效之前返回。这是我的第二期。

    using(var serverManager = new ServerManager())
    {
        //[Create site and pool]
        serverManager.CommitChanges();
        Thread.Sleep(100);
    
        serverManager.AddEnvironmentVariablesToWebSite(serverManager, environmentVariable, siteName);
        serverManager.CommitChanges();
    }
    

    希望有帮助。