Beispiel #1
0
        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);
Beispiel #2
0
        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");
            }
        }
Beispiel #3
0
        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);
Beispiel #4
0
        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);
            }
        }