2016-09-20 15 views
1

私はMicroservices Frameworkを使ってDockerの飛び込みを見ています。私は、何かをするために何かによって呼び出されるエンドポイントを公開する数多くの例を見てきました(ある場所で気象を取得し、通貨の為替レートなどを取得します)。現在のWindowsサービスタイプのアプリケーションやキューに登録しているアプリケーションを置き換えて作業を行う方法については何も見ていません。どのasp.netエンドポイントのないMicroServiceのコアプロジェクト

たとえば、毎日午前2時にWindowsサービスを使用して、指定されたディレクトリ内のすべてのファイルを圧縮し、別のディレクトリに配置してから完了したというメッセージを発行するとします。

私はasp.netコア "コンソールアプリケーション"を構築し、startup.csを追加しますか?自分のメインにstartup.csまたは起動方法が必要ですか?

私が言ったように、小さなWebレスポンスを構築するためのデモはたくさんありますが、必要としないエンドポイントが必要ない場合は、他に何をするべきかについてはほとんどありません。

答えて

1

Startup.csはASP.NET固有のもので、Webスタックであり、IISの背後にあるWebListenerまたはKestrelでホストされています。

コンソールアプリケーションでは、従来のStartup.csは使用しませんが、一貫性のあるベースを持つことはできますが、IoCコンテナの作成を制御しているためWebアプリケーションであなたのために行うASP.NETコア)。通常、Startup.csは、のWebHostBuilderによって処理され、IServiceCollectionConfigureServicesメソッドに渡す前に、自分自身のものを注入できるようにします。

あなたはコンソールアプリケーションが必要であり、そこにすべてのものを自分でやることが正しいです。

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>(); 
     ... 
    } 
} 

あなたがホストとして使いたいことは、あなた次第です。

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

開始し、アプリケーションの実行を継続し、Azureのメッセージと、その中に登録されたイベントを受け取るになるだろう:それはすなわち、Azureのウェブタスク/ホストである可能性があります。あるいは、Hangfireのような他のバックグラウンドタスクフレームワークを使用します。

ASP.NETコアでは、このすべてがフレームワークによって処理されますが、ASP.NETコアはWeb用に作られているため、エンドポイントによって異なります。 ASP.NETコアアプリケーションで使用されるStartupクラスのConfigureメソッド内のほとんどのものは、HttpContextで動作するミドルウェアの登録についてです。エンドポイントなしでマイクロサービスにこれらを持っていません。終点なし、いいえHttpContext、ミドルウェアは必要ありません。

もちろん、コンソールアプリケーションにはIApplicationBuilderもありません。先に登録したサービスを解決するにはIServiceProviderです。

+0

偉大な、私はこれをショットと報告を返す – TalMcMahon

関連する問題