Comment démarrer une application Asp.Net noyau à l'intérieur d'un service Windows existant ou à l'application de la console

voix
3

Nous avons un service existant de Windows qui héberge certains de nos services WCF. Voici quelques-unes de notre intégration API s.

Ce que nous voudrions faire est de commencer une Asp.Net l'application de base dans ce service Windows. Cette application Asp.Net Core est en projet distinct et nous aimerions y maintenir. Ce projet sera compilé comme ClassLibrary.

Ce ne serait pas fait comme dans les articles courants que vous trouverez sur Google lorsque vous tapez « Asp.Net de base en tant que service Windows » ...

Je trouve cette question , mais la réponse ne convient pas. Nous voudrions éviter l' enregistrement de ce en tant que service distinct en raison du travail supplémentaire nécessaire dans le processus d'installation.

Je pensais aussi que si je construis le IWebHost et l'appel exécuté sur un thread séparé que cela fonctionnerait. En effet, le serveur Web démarre mais toutes les demandes que je lui adresser ne sont pas valides comme rien ne se passe.

Quelqu'un at-il eu une expérience avec ce genre de problème?

Créé 27/11/2018 à 15:07
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
1

Classe fichier de projet de bibliothèque (cibles de 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>

Service Program.cs (cibles 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(); }
}

Le service nécessaire d'ajouter quelques forfaits 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

entrez la description d'image ici

Créé 06/12/2018 à 10:42
source utilisateur

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