Как запустить приложение Asp.Net сердечника внутри существующей службы Windows, или консольное приложение

голоса
3

У нас есть существующие службы Windows, на котором размещается некоторые из наших служб WCF. Вот некоторые из нашей интеграции API-х годов.

То, что мы хотели бы сделать, это запустить приложение Asp.N Co, в этой службе окна. Это приложение Asp.Net Ядро находится в отдельном проекте, и мы хотели бы сохранить его там. Этот проект будет составлен по ClassLibrary.

Это не будет сделано, как в общих статьях вы найдете на Google при вводе в «Asp.Net Сердечник как службы Windows» ...

Я нашел этот вопрос , но ответ не подходит. Мы хотели бы избежать регистрации это как отдельную услугу из - за дополнительной работы , необходимой в процессе установки.

Я также подумал, что если я построить IWebHost и вызова выполняется на отдельном потоке, что он будет работать. Действительно сервер запускается веб-но все запросы, которые я делаю для него недействительны, как ни в чем не происходит вообще.

Кто-нибудь имел опыт работы с такой проблемой?

Задан 27/11/2018 в 15:07
источник пользователем
На других языках...                            


1 ответов

голоса
1

Библиотека классов файлов проекта (цели netstandard2.0)

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Hosting" Version="2.2.0" />
    <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.2.0" />
  </ItemGroup>

</Project>

Услуги Program.cs (цели net472)

class Program
{
    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup(typeof(Startup).Assembly.FullName);

    public static void Main(string[] args)
    {

        Task.Run(() => CreateWebHostBuilder(args).Build().Run());

        var rc = HostFactory.Run(x => //1
        {
            x.Service<TownCrier>(s => //2
            {
                s.ConstructUsing(name=> new TownCrier()); //3
                s.WhenStarted(tc => tc.Start());          //4
                s.WhenStopped(tc => tc.Stop());           //5
            });
            x.RunAsLocalSystem(); //6

            x.SetDescription("Sample Topshelf Host"); //7
            x.SetDisplayName("Stuff");                //8
            x.SetServiceName("Stuff");                //9
        });                                           //10

        var exitCode = (int) Convert.ChangeType(rc, rc.GetTypeCode()); //11
        Environment.ExitCode = exitCode;
    }
}

public class TownCrier
{
    readonly Timer _timer;
    public TownCrier()
    {
        _timer         =  new Timer(1000) {AutoReset = true};
        _timer.Elapsed += (sender, eventArgs) => Console.WriteLine("It is {0} and all is well", DateTime.Now);
    }
    public void Start() { _timer.Start(); }
    public void Stop()  { _timer.Stop(); }
}

Служба требуется добавить пару NuGet пакетов:

  • Microsoft.AspNetCore
  • Microsoft.AspNetCore.Hosting.Abstractions
  • Microsoft.AspNetCore.HostFiltering
  • Microsoft.AspNetCore.Server.IIS
  • Microsoft.AspNetCore.Server.IISIntegration
  • Microsoft.AspNetCore.Server.Kestrel
  • Microsoft.AspNetCore.Server.Kestrel.Core
  • Microsoft.Extensions.Configuration.CommandLine
  • Microsoft.Extensions.Configuration.Json
  • Microsoft.Extensions.Configuration.UserSecrets
  • Microsoft.Extensions.Logging.Configuration
  • Microsoft.Extensions.Logging.Console
  • Microsoft.Extensions.Logging.Debug
  • Microsoft.Extensions.Logging.EventSource

введите описание изображения здесь

Ответил 06/12/2018 в 10:42
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more