没有端点的MicroService的asp.net核心项目

时间:2016-09-20 22:09:26

标签: asp.net asp.net-core microservices

我正在考虑使用微服务框架让Docker陷入困境。我已经看到了许多暴露端点被一些东西调用的例子(给我一个位置的天气,货币的汇率等)。我还没有看到任何有关如何替换我当前的Windows服务类型应用程序或订阅队列来完成其工作的应用程序的事情。

例如,假设我有一个Windows服务,每天凌晨2:00压缩给定目录中的所有文件并将它们放入不同的目录(然后发布一条消息,表明它已完成)。

我是否构建了一个asp.net核心"控制台应用程序"并添加一个startup.cs?我需要一个startup.cs或者只是一个启动方法吗?

就像我说的那样,很多演示建立一个微小的网络响应的演示,但如果我不想要/需要和端点,还有什么可做的。

1 个答案:

答案 0 :(得分:1)

Startup.cs是特定于ASP.NET Core的,它本身就是一个Web堆栈,并在IIS后面托管了WebListener或Kestrel。

在控制台应用程序中,您不会使用传统的Startup.cs,虽然您可以拥有一致的基础,但它看起来会有所不同,因为您可以控制创建IoC容器(而不是而不是ASP.NET Core在Web应用程序中为您执行此操作)。通常,Startup.cs由WebHostBuilder中的Program.cs处理,以允许它在将IServiceCollection传递给ConfigureServices方法之前注入自己的内容。

你是对的,你需要一个控制台应用程序,在那里你自己做所有的事情。

public class Program
{
    public IConfigurationRoot Configuration { get; private set; }
    public IServiceProvider Provider { get; private set; }

    public static void Main()
    {
        var programm = new Programm();
        program.Run();
    }

    private void Run() 
    {
        var builder = new ConfigurationBuilder()
            .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
            .AddEnvironmentVariables();

        Configuration = builder.Build();

        var services = new ServiceCollection();
        ConfigureServices(services);
        this.Provider = services.BuildServiceProvider();

        var host = this.Provider.GetRequiredService<MyHost>();
        // blocking operation, the host should be something that keeps the service running
        // once it stops, the application stops too as there are no additional 
        host.Run();
    }

    private void ConfigureServices(IServiceCollection services) 
    {
        services.AddTransient<IMyService, MyService>();
        services.AddSingleton<MyHost>();
        ...
    }
}

您想要用作主机,取决于您。它可以是Azure Web任务/主机:

using(var jobHost = new JobHost(new JobHostConfiguration(Configuration.GetConnectionString("AzureWebJobsDashboard")))) 
{
    jobHost.RunAndBlock();
}

将启动并保持应用程序运行并接收在其中注册的Azure消息和事件。或者您使用一些其他后台任务框架,如Hangfire。

在ASP.NET Core中,所有这些都由框架处理,但ASP.NET Core是为Web内容而制作的,因此取决于端点。 ASP.NET Core应用程序中使用的Configure类的Startup方法中的大多数内容都是关于注册中间件,这些中间件适用于HttpContext。你没有在没有端点的微服务中拥有这些。没有端点,没有HttpContext,不需要中间件。

当然,您在控制台应用程序中也没有IApplicationBuilder,只需IServiceProvider来解析您之前注册的服务。