ASP.NET Core Sitesini Konsol Parametleriyle Çalıştırmak

günü tarafından yayınlandı.

ASP.NET Core uygulamasını içeren .dll dosyası KestrelHttpServer sunucusu sayesinde IIS’e ihtiyaç duymadan ayağa kalkabilmektedir. Bir konsol uygulaması gibi çalışmaktadır.

Örnek senaryomuz; Heroku cloud platformuna kurduğumuz uygulamamız ayağa kaldırıldığı sırada server.urls parametresi ile belirli bir portu dinlemeye zorlanmaktadır. ASP.NET Core uygulamaları ön tanımlı olarak 5000 portu üzerinden çalışırlar. Bu durumda uygulamamız istenen portu dinlemeyecektir.

cd /app/heroku_output && dotnet ./Libton.dll --server.urls http://+:54372

Heroku platformunda dotnet cli‘a gönderilen bu komutta istenen port değişken olarak verilmektedir.

Konsol uygulamalarında çalıştırma sırasında parametreler vererek program içerisinde bunları kullanabiliriz. Bu yeteneği uygulamamıza kazandırabilmek için NuGet Package Manager üzerinden Microsoft.Extensions.Configuration.CommandLine referansını ekleriz.

Daha sonra Program class’ında ki Main methodunda, komut satırı parametrelerini ayar parametlerine dönüştürerek, WebHostBuilder’a bu ayarları aktarırız.

Bu çalışma sonunda Program.cs dosyamız aşağıdaki hali alır.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
using System.IO;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;

namespace Libton
{
  public class Program
  {
    public static void Main(string[] args)
    {
      //Komut satırı parametrelerini ayarlara çevirir
      var config = new ConfigurationBuilder()
        .AddCommandLine(args)
        .Build();

      var host = new WebHostBuilder()
        .UseConfiguration(config)//Ayarları aktarır
        .UseKestrel()
        .UseContentRoot(Directory.GetCurrentDirectory())
        .UseIISIntegration()
        .UseStartup<Startup>()
        .Build();

      host.Run();
    }
  }
}

Evet, ASP.NET Heroku’da çalışabiliyor.

aspnet core, commandline, dotnet Yazılım

Yazar: Olcay Bayram

Çeşitli teknoloji firmalarında çalışmış, yurtiçi ve yurtdışı farklı sektörlerden tecrübe edinmiş, derdini iki yabancı dilde anlatabilen bir yazılım uzmanı.