托管在 IIS 中的 Asp.Net Core 应用 - 如何传递启动参数

问题描述 投票:0回答:1

我有一个 Asp.Net Core 应用程序,可以托管在 IIS 中或作为 WindowsService。

这是 Program.cs 的一部分

public static class Program
{
    public static void Main(string[] args)
    {
        var hostAsWindowsService = !args.Contains("--web");

        var contentRoot = hostAsWindowsService ? Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName) : Directory.GetCurrentDirectory();

        var config = new ConfigurationBuilder()
            .SetBasePath(contentRoot)
            .AddJsonFile("host.json")
            .AddCommandLine(args)
            .AddEnvironmentVariables()
            .Build();

        var environment = config["environment"];
        var urls = config["server.urls"];
        var certificateFilename = config["certificate.filename"];
        var certificatePassword = config["certificate.password"];

        var hostConfig = new WebHostBuilder()
            .UseConfiguration(config)
            .UseUrls(urls)
            .UseContentRoot(contentRoot)
            .UseKestrel(options =>
                        {
                            if (!string.IsNullOrWhiteSpace(certificateFilename))
                            {

                                options.UseHttps(contentRoot + certificateFilename, certificatePassword);
                            }
                        })
            .UseStartup<Startup>();

        if (!string.IsNullOrWhiteSpace(environment))
        {
            hostConfig.UseEnvironment(environment);
        }

        if (hostAsWindowsService)
        {
            hostConfig
                .Build()
                .RunAsEycService();
        }
        else
        {
            hostConfig
                .UseIISIntegration()
                .Build()
                .Run();
        }
    }
}

我无法在作为 Windows 服务托管时传递参数,因此默认情况下该项目作为 WS 托管。我实际上可以在 IIS 启动我的站点时将参数传递给它,以便使用 Main 方法中的正确托管(args.Contains("--web"))吗?

我尝试将参数传递给Windows服务主机:

1) sc.exe 创建 MyService binPath= "c:\Projects\MyService.exe --ws=true"

2)在Windows服务对话框的“启动参数”中添加“--ws=true”(实际上不会保存)

iis asp.net-core
1个回答
0
投票

我知道这是一个老问题 - 但以防万一其他人遇到这个问题(就像我刚才所做的那样)。

  • 转到 IIS 管理器中的站点
  • 打开“配置编辑器”
  • 在“部分”下拉列表中的“system.webServer”下,单击“aspNetCore”。
  • 在“来自”下拉列表中选择“ApplicationHost.config
  • 您现在可以在“参数”下输入命令行参数。

请注意,通过使用“ApplicationHost.config”而不是“您的站点 Web.config”,即使在重新发布站点(覆盖 web.config 文件)后,您也可以保留该设置

© www.soinside.com 2019 - 2024. All rights reserved.