通过.net Core中的外部应用程序控制通用主机

时间:2019-05-06 09:03:26

标签: c# asp.net .net asp.net-core

我的一般用例是:对于我的Web应用程序(.net核心),我想创建一个服务。 Microsoft从.net core 2.1开始,旨在使用“通用主机”轻松创建服务。但是我想从Web应用程序启动和停止我的服务,这就是为什么我在寻找解决方案。在Microsoft文档中,我找到了一种称为“外部控制” https://docs.microsoft.com/fr-fr/aspnet/core/fundamentals/host/generic-host?view=aspnetcore-2.2#external-control

的方法

这是我正在谈论的代码:

public class Program { 
private IHost _host;

public Program()
{
    _host = new HostBuilder()
        .Build();
}

public async Task StartAsync()
{
    _host.StartAsync();
}

public async Task StopAsync()
{
    using (_host)
    {
        await _host.StopAsync(TimeSpan.FromSeconds(5));
    }
}
}

似乎我们可以从外部应用程序调用通用主机,但是Microsoft文档中没有足够的说明,这就是为什么我一直在寻求帮助并说明如何使用它,或者您是否有任何解决方案可以从中控制通用主机.net核心Web应用程序? 感谢您的帮助

1 个答案:

答案 0 :(得分:1)

您误读了“外部”一词。该文档指出:

  

可以使用可以在外部调用的方法来实现对主机的外部控制:

,然后显示以下示例:

public class Program
{
    private IHost _host;

    public Program()
    {
        _host = new HostBuilder()
            .Build();
    }

    public async Task StartAsync()
    {
        _host.StartAsync();
    }

    public async Task StopAsync()
    {
        using (_host)
        {
            await _host.StopAsync(TimeSpan.FromSeconds(5));
        }
    }
}

在此上下文中,外部是主机本身以外的一段代码。它应该是同一过程中的代码,就像加载的另一个类或另一个程序集一样。

在这种情况下,

外部不是 的意思,它来自另一个过程,其中包括Web api或网站。

  

似乎我们可以从外部应用程序

调用通用主机

因此,假设您正在考虑开发一个控制台应用程序,它将构建一个主机并通过您的Web应用程序对其进行控制,那么这将无法正常工作。