【发布时间】:2020-06-26 21:12:23
【问题描述】:
我需要从控制台应用程序启动 2 个 Kestrel 服务器。下面的代码显示了我现在是如何做的。
不幸的是,两台服务器都尝试在相同的端口 HTTP:5000 和 HTTPS:5001 上启动,但实际上只启动了第一个。
我还尝试在 appsettings.json 中指定 URLs,但它没有按预期工作,我不想硬编码服务器 URL,因为如果我重新启动控制台应用程序,它不会杀死以前启动的服务器并且可以不要再次启动它们。
问题
如何从代码为两台服务器的 HTTP 和 HTTPS 找到空闲端口并确保它们不同?
服务器
public class WebServer
{
public static IWebHost Run<TStartup>(WebOptions options = null)
{
var configuration = new ConfigurationBuilder().Build();
var environment = WebHost
.CreateDefaultBuilder(new string[0])
.ConfigureServices(o => o.AddSingleton(options))
.UseConfiguration(configuration)
.UseContentRoot(Directory.GetCurrentDirectory())
.UseKestrel()
.UseStartup<TStartup>()
.Build();
environment.RunAsync();
return environment;
}
}
var serviceEnvironment = Server.Run<ServiceStartup>();
var webEnvironment = Server.Run<WebStartup>();
var serviceAddresses = serviceEnvironment.ServerFeatures.Get<IServerAddressesFeature>().Addresses;
var webAddresses = webEnvironment.ServerFeatures.Get<IServerAddressesFeature>().Addresses;
【问题讨论】:
标签: asp.net-core kestrel-http-server