2016-09-20 39 views
1

我正在考虑采取与微服务框架的Docker暴跌。我已经看到了很多暴露端点的例子,这些例子都是通过某些东西来调用来做某事(让我知道某个位置的天气,货币的汇率等等)。我还没有看到任何有关如何替换当前Windows服务类型应用程序或预订队列以执行其工作的应用程序的任何内容。什么asp.net核心项目的MicroService没有端点

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

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

就像我说过的,很多演示构建一个微小的Web响应,但很少有关如果我不想/需要和端点还有什么要做。

回答

1

Startup.cs与ASP.NET Core特有的相当,它本身就是一个Web栈,并且由IIS后面的WebListener或Kestrel托管。

在控制台应用程序中,您不会使用传统的Startup.cs,尽管您可以拥有一致的基础,但它看起来有点不同,因为您控制创建IoC容器(而不是ASP.NET Core在Web应用程序中为您完成)。正常情况下,Startup.cs由WebHostBuilderProgram.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应用程序中使用的Startup类的Configure方法中的大部分内容都是关于注册中间件的,这些中间件在HttpContext上工作。你没有这些微服务而不是端点。没有端点,没有HttpContext,不需要中间件。

当然,您还没有在控制台应用程序中使用IApplicationBuilder,只需要IServiceProvider即可解决您之前注册的服务。

+0

太好了,我会给这个镜头并报告回来 – TalMcMahon

相关问题