public static IWebHostBuilder ConstructWebHostBuilder( StartupOptions options, IServiceCollection serviceCollection) { using var _ = Log.OnEnterAndExit(); // FIX: (ConstructWebHostBuilder) dispose me var disposables = new CompositeDisposable { StartToolLogging(options) }; HttpProbingSettings probingSettings = null; if (options.EnableHttpApi) { var httpPort = GetFreePort(options); options.HttpPort = httpPort; probingSettings = HttpProbingSettings.Create(httpPort.PortNumber); } var webHost = new WebHostBuilder() .UseKestrel() .UseDotNetInteractiveHttpApi(options.EnableHttpApi, options.HttpPort, probingSettings, serviceCollection) .UseStartup <Startup>(); if (options.EnableHttpApi && probingSettings != null) { webHost = webHost.UseUrls(probingSettings.AddressList.Select(a => a.AbsoluteUri).ToArray()); } return(webHost);
public static IWebHostBuilder ConstructWebHostBuilder( StartupOptions options, IServiceCollection serviceCollection) { // FIX: (ConstructWebHostBuilder) dispose me var disposables = new CompositeDisposable { StartToolLogging(options) }; var httpPort = options.HttpPort ??= GetFreePort(options.HttpPortRange); var probingSettings = HttpProbingSettings.Create(httpPort); var webHost = new WebHostBuilder() .UseKestrel() .ConfigureServices(c => { c.AddSingleton(probingSettings); c.AddSingleton(options); foreach (var serviceDescriptor in serviceCollection) { c.Add(serviceDescriptor); } }) .UseStartup <Startup>() .UseUrls(probingSettings.AddressList.Select(a => a.AbsoluteUri).ToArray()); return(webHost); int GetFreePort(PortRange httpPortRange = null) { var currentPort = httpPortRange?.Start ?? 0; var endPort = httpPortRange?.End ?? 0; for (; currentPort <= endPort; currentPort++) { try { var l = new TcpListener(IPAddress.Loopback, currentPort); l.Start(); var port = ((IPEndPoint)l.LocalEndpoint).Port; l.Stop(); return(port); } catch (SocketException) { } } throw new InvalidOperationException("Cannot find a port"); } }
public static IWebHostBuilder ConstructWebHostBuilder( StartupOptions options, IServiceCollection serviceCollection) { using var _ = Log.OnEnterAndExit(); // FIX: (ConstructWebHostBuilder) dispose me var disposables = new CompositeDisposable { StartToolLogging(options) }; HttpProbingSettings probingSettings = null; if (options.EnableHttpApi) { var httpPort = GetFreePort(options); probingSettings = HttpProbingSettings.Create(httpPort.PortNumber); } var webHost = new WebHostBuilder() .UseKestrel() .ConfigureServices(c => { if (options.EnableHttpApi && probingSettings != null) { c.AddSingleton(probingSettings); } c.AddSingleton(options); foreach (var serviceDescriptor in serviceCollection) { c.Add(serviceDescriptor); } }) .UseStartup <Startup>(); if (options.EnableHttpApi && probingSettings != null) { webHost = webHost.UseUrls(probingSettings.AddressList.Select(a => a.AbsoluteUri).ToArray()); } return(webHost);
public static IWebHostBuilder ConstructWebHostBuilder( StartupOptions options, IServiceCollection serviceCollection) { // FIX: (ConstructWebHostBuilder) dispose me var disposables = new CompositeDisposable { StartToolLogging(options) }; var httpPort = options.HttpPort ??= GetFreePort(); var probingSettings = HttpProbingSettings.Create(httpPort); var webHost = new WebHostBuilder() .UseKestrel() .ConfigureServices(c => { c.AddSingleton(probingSettings); c.AddSingleton(options); foreach (var serviceDescriptor in serviceCollection) { c.Add(serviceDescriptor); } }) .UseStartup <Startup>() .UseUrls(probingSettings.AddressList.Select(a => a.AbsoluteUri).ToArray()); return(webHost); int GetFreePort() { var l = new TcpListener(IPAddress.Loopback, 0); l.Start(); var port = ((IPEndPoint)l.LocalEndpoint).Port; l.Stop(); return(port); } }