Хост веб-приложения .net core 6.0 в качестве службы Windows Kestrel
Если вы создадите веб-приложение .NET Core 6.0 по умолчанию, оно будет работать как служба приложений. Но если вы хотите разместить приложение самостоятельно, вы можете запустить его как службу Windows.
Вот как вы обычно инициализируете веб-приложение в .NET Core 6:
var builder = WebApplication.CreateBuilder(args);
Для реализации возможностей службы Windows вам понадобится следующий пакет Nuget:
Microsoft.Extensions.Hosting.WindowsServices
Install-Package Microsoft.Extensions.Hosting.WindowsServices
И вам нужно изменить WebApplication.CreateBuilder:
var options = new WebApplicationOptions
{
Args = args,
ContentRootPath = WindowsServiceHelpers.IsWindowsService() ? AppContext.BaseDirectory : default
};
var builder = WebApplication.CreateBuilder(options);
var configuration = builder.Configuration;
builder.Host.UseWindowsService();
builder.WebHost.ConfigureKestrel(options =>
{
// http port
options.ListenAnyIP(configuration.GetSection("Host:HttpPort").Get());
// https port
options.ListenAnyIP(configuration.GetSection("Host:HttpsPort").Get(), listenOptions => listenOptions.UseHttps());
});
Службы Windows расположены в папке System32, поэтому WebApplicationOptions изменяет корневой путь содержимого обратно на базовый каталог самого приложения.
Развертывание
set serviceName="NLT"
set serviceFilePath="C:\Program Files\TitratorNLT\Windows\TitratorNLT.exe"
set serviceDescription = "Служба выгрузки в LIMS приборов серии NLT"
sc create %serviceName% BinPath=%serviceFilePath%
sc config %serviceName% start=auto
sc config %serviceName% start=delayed-auto
sc description %serviceName% %serviceDescription%
sc failure %serviceName% reset=0 actions=restart/1200000
sc start %serviceName%
pause
Удаление
set serviceName="NLT"
sc stop %serviceName%
sc delete %serviceName%
pause
Только полноправные пользователи могут оставлять комментарии. Аутентифицируйтесь пожалуйста, используя сервисы.