Как разместить веб-приложение API. NET Core 3.1 как службу windows? - PullRequest
3 голосов
/ 28 мая 2020

У меня есть существующее веб-приложение. NET Core 3.1 API, которое я хотел бы разместить как службу windows. Как лучше всего добиться этого?

Я нашел несколько руководств, в которых говорится, что добавления пакета nuget Microsoft.Extensions.Hosting.WindowsServices и использования функции UseWindowsService() должно быть достаточно, чтобы разместить его как службу windows. У меня это не работает. Я получаю ошибку 1053: служба не ответила на запрос запуска или управления своевременно.

Я также читал о рабочих службах, но понятия не имею, как это будет работать с существующим API проект.

Мой Program.cs выглядит так:

 public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args)
        {
            var config = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json", optional: false)
                .Build();

            return Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseUrls(config.GetSection("Hosting:Url").Value);
                    webBuilder.UseStartup<Startup>();
                }).UseWindowsService();
        }
    }

Ответы [ 2 ]

0 голосов
/ 29 мая 2020

Я думаю, что, загрузив пакет Microsoft.Extensions.Hosting.WindowsServices, а затем добавив UseWindowsService() в конце CreateHostBuilder в Program.cs, публикация будет самым простым способом. (Это должен быть ваш текущий план.)

Я получаю сообщение об ошибке 1053: служба не ответила на запрос запуска или управления своевременно.

Что касается ошибки, с которой вы в настоящее время сталкиваетесь, обратитесь к этому документу , чтобы исправить.

Вы можете полностью опубликовать sh свое приложение, прочитав эту статью и повернув в службу windows. (Прочитав эту статью, я успешно удовлетворил ваши потребности.)

Следует отметить два момента.

При выполнении cmd , вам нужно щелкнуть правой кнопкой мыши и выбрать Run as Administrator, а затем выполнить команду s c.

Выполняемый оператор команды binPath и «=» не могут содержать пробелов, но знак «= "и кавычки должны быть разделены, вот пример:

C:\WINDOWS\system32>sc create MyService binPath= "C:\Projects\WindowsServiceDemo\bin\Release\netcoreapp3.1\win-x64\WindowsServiceDemo.exe"
0 голосов
/ 28 мая 2020

Вот как я это делаю:

using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Hosting.WindowsServices;

namespace App.Name.API
{
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateWebHostBuilder(args).Build().RunAsService();
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>();
    }
}

Я использую CreateWebHostBuilder вместо Create WebHostBuilder, поскольку я больше к нему привык (и не уверен в разнице между ними). ​​

...