I am trying to create windows service using dotnet worker project that starts up rest-api, I am using kestrel server for this purpose:
using System;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Builder;
namespace TurkisisService
{
public class Worker : BackgroundService
{
private readonly ILogger<Worker> _logger;
public Worker(ILogger<Worker> logger)
{
_logger = logger;
kestrelStarted=false;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
_logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
if(!kestrelStarted) {
kestrelStarted=true;
var host = new WebHostBuilder()
.UseKestrel()
.UseStartup<Startup>()
.Build();
var task = Task.Run(() => {
host.Run();
});
}
await Task.Delay(1000, stoppingToken);
}
}
private bool kestrelStarted;
}
public class Startup {
public void Configure(IApplicationBuilder app){
app.Run(context => {
return context.Response.WriteAsync("Hello world!");
});
}
}
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<Worker>();
});
}
}
I used these packages:
<Project Sdk="Microsoft.NET.Sdk.Worker">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<UserSecretsId>dotnet-turkisis_service-9216353E-18A1-49B4-8CAB-E939439FF992</UserSecretsId>
<RootNamespace>turkisis_service</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore" Version="2.2.0" />
<PackageReference Include="Microsoft.AspNetCore.Server.Kestrel" Version="2.2.0" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="5.0.0" />
</ItemGroup>
The console displays these lines of logs:
Now listening on: http://localhost:5000 Now listening on: https://localhost:5001
but when I open the url on web browser: http://localhost:5000, also https://localhost:5001 returns empty, they are display: ERR_EMPTY_RESPONSE