// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; using System.IO; using System.Net; using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Server.Kestrel.Internal; using Microsoft.Extensions.Logging; namespace SampleApp { public class Startup { public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory) { loggerFactory.AddConsole(LogLevel.Trace); var logger = loggerFactory.CreateLogger("Default"); app.Run(async context => { var connectionFeature = context.Connection; logger.LogDebug($"Peer: {connectionFeature.RemoteIpAddress?.ToString()}:{connectionFeature.RemotePort}" + $"{Environment.NewLine}" + $"Sock: {connectionFeature.LocalIpAddress?.ToString()}:{connectionFeature.LocalPort}"); var response = $"hello, world{Environment.NewLine}"; context.Response.ContentLength = response.Length; context.Response.ContentType = "text/plain"; await context.Response.WriteAsync(response); }); } public static void Main(string[] args) { TaskScheduler.UnobservedTaskException += (sender, e) => { Console.WriteLine("Unobserved exception: {0}", e.Exception); }; var host = new WebHostBuilder() .UseKestrel(options => { options.Listen(IPAddress.Loopback, 5000, listenOptions => { // Uncomment the following to enable Nagle's algorithm for this endpoint. //listenOptions.NoDelay = false; listenOptions.UseConnectionLogging(); }); options.Listen(IPAddress.Loopback, 5001, listenOptions => { listenOptions.UseHttps("testCert.pfx", "testPassword"); listenOptions.UseConnectionLogging(); }); options.UseSystemd(); // The following section should be used to demo sockets //options.ListenUnixSocket("/tmp/kestrel-test.sock"); // Uncomment the following line to change the default number of libuv threads for all endpoints. //options.ThreadCount = 4; }) .UseContentRoot(Directory.GetCurrentDirectory()) .UseStartup() .Build(); host.ServerFeatures.Get().ThreadPoolDispatching = false; host.Run(); } } }