What asp.net 没有端点的微服务核心项目
What asp.net Core project for MicroService without endpoint
我正在考虑 Docker 使用微服务框架。我见过许多公开端点的示例,这些端点会被某事调用以执行某事(让我了解某个位置的天气、货币汇率等)。我还没有看到任何关于如何替换我当前的 Windows 服务类型应用程序或订阅队列以完成其工作的应用程序的内容。
例如,假设我有一个 windows 服务,每天在 2:00 AM 压缩给定目录中的所有文件并将它们放入不同的目录(然后发布消息它已完成)。
我是否构建一个 asp.net 核心 "console app" 并添加一个 startup.cs?我的 main 中需要 startup.cs 还是只需要一个启动方法?
就像我说的,有很多关于构建微型 Web 响应的演示,但很少涉及如果我不这样做的话还能做什么 want/need 和端点。
Startup.cs 非常 ASP.NET 核心特定,它本身是一个网络堆栈,由 IIS 后面的 WebListener 或 Kestrel 托管。
在控制台应用程序中,您不会使用传统的 Startup.cs,尽管您可以拥有一致的基础,但它看起来会有点不同,因为您可以控制 IoC 容器的创建(而不是 ASP.NET Core 在 Web 应用程序中为您完成)。通常 Startup.cs 由 Program.cs
中的 WebHostBuilder
处理,以允许它在将 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 Task/Host:
using(var jobHost = new JobHost(new JobHostConfiguration(Configuration.GetConnectionString("AzureWebJobsDashboard"))))
{
jobHost.RunAndBlock();
}
这将启动并保持应用程序 运行 并接收在其中注册的 Azure 消息和事件。或者您使用其他一些后台任务框架,例如 Hangfire。
在 ASP.NET Core 中,所有这些都由框架处理,但 ASP.NET Core 是为 Web 内容制作的,因此取决于端点。 ASP.NET 核心应用程序 Startup
class 的 Configure
方法中的大部分内容都是关于注册中间件的,这些中间件在 HttpContext
上工作。您在微服务 w/o 端点中没有这些。没有端点,没有 HttpContext
,不需要中间件。
当然,您在控制台应用程序中也没有 IApplicationBuilder
,只有 IServiceProvider
来解析您之前注册的服务。
我正在考虑 Docker 使用微服务框架。我见过许多公开端点的示例,这些端点会被某事调用以执行某事(让我了解某个位置的天气、货币汇率等)。我还没有看到任何关于如何替换我当前的 Windows 服务类型应用程序或订阅队列以完成其工作的应用程序的内容。
例如,假设我有一个 windows 服务,每天在 2:00 AM 压缩给定目录中的所有文件并将它们放入不同的目录(然后发布消息它已完成)。
我是否构建一个 asp.net 核心 "console app" 并添加一个 startup.cs?我的 main 中需要 startup.cs 还是只需要一个启动方法?
就像我说的,有很多关于构建微型 Web 响应的演示,但很少涉及如果我不这样做的话还能做什么 want/need 和端点。
Startup.cs 非常 ASP.NET 核心特定,它本身是一个网络堆栈,由 IIS 后面的 WebListener 或 Kestrel 托管。
在控制台应用程序中,您不会使用传统的 Startup.cs,尽管您可以拥有一致的基础,但它看起来会有点不同,因为您可以控制 IoC 容器的创建(而不是 ASP.NET Core 在 Web 应用程序中为您完成)。通常 Startup.cs 由 Program.cs
中的 WebHostBuilder
处理,以允许它在将 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 Task/Host:
using(var jobHost = new JobHost(new JobHostConfiguration(Configuration.GetConnectionString("AzureWebJobsDashboard"))))
{
jobHost.RunAndBlock();
}
这将启动并保持应用程序 运行 并接收在其中注册的 Azure 消息和事件。或者您使用其他一些后台任务框架,例如 Hangfire。
在 ASP.NET Core 中,所有这些都由框架处理,但 ASP.NET Core 是为 Web 内容制作的,因此取决于端点。 ASP.NET 核心应用程序 Startup
class 的 Configure
方法中的大部分内容都是关于注册中间件的,这些中间件在 HttpContext
上工作。您在微服务 w/o 端点中没有这些。没有端点,没有 HttpContext
,不需要中间件。
当然,您在控制台应用程序中也没有 IApplicationBuilder
,只有 IServiceProvider
来解析您之前注册的服务。