ASP.NET Core .NET genel ana bilgisayarı

ASP.NET Core şablonları bir .net Core genel konağı () oluşturur HostBuilder .

Bu konuda, ASP.NET Core .NET genel Host kullanımı hakkında bilgi verilmektedir. Konsol uygulamalarında .NET genel ana bilgisayarı kullanma hakkında bilgi için bkz. .NET genel ana bilgisayar.

Ana bilgisayar tanımı

Ana bilgisayar , bir uygulamanın kaynaklarını kapsülleyen bir nesnedir, örneğin:

  • Bağımlılık ekleme (dı)
  • Günlüğe Kaydetme
  • Yapılandırma
  • IHostedService uygulamalarını

Bir konak başlatıldığında, IHostedService.StartAsync IHostedService hizmet kapsayıcısının barındırılan hizmetler koleksiyonunda kayıtlı her bir uygulamasına çağrı yapılır. Bir Web uygulamasında, IHostedService uygulamalardan biri http sunucu uygulamasıBaşlatan bir Web hizmetidir.

Uygulamanın tüm birbirine bağlı kaynaklarını tek bir nesnede dahil etmek için başlıca neden, yaşam süresi yönetimi: uygulama başlatma ve düzgün kapanma üzerinde denetim.

Konak ayarlama

Ana bilgisayar genellikle sınıfında kodla yapılandırılır, oluşturulur ve çalıştırılır Program . MainYöntemi:

  • CreateHostBuilderBir Oluşturucu nesnesi oluşturmak ve yapılandırmak için bir yöntem çağırır.
  • Build Run Oluşturucu nesnesindeki çağrılar ve Yöntemler.

ASP.NET Core web şablonları, bir konak oluşturmak için aşağıdaki kodu oluşturur:

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}

Aşağıdaki kod, dı kapsayıcısına eklenen bir uygulamayla HTTP olmayan bir iş yükü oluşturur IHostedService .

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureServices((hostContext, services) =>
            {
               services.AddHostedService<Worker>();
            });
}

Bir HTTP iş yükü için Main yöntem aynıdır ancak çağrılır CreateHostBuilder ConfigureWebHostDefaults :

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();
        });

Uygulama Entity Framework Core kullanıyorsa, yöntemin adını veya imzasını değiştirmeyin CreateHostBuilder . Entity Framework Core araçları , CreateHostBuilder uygulamayı çalıştırmadan Konağı yapılandıran bir yöntem bulmayı bekler. Daha fazla bilgi için bkz. Tasarım zamanı DbContext oluşturma.

Varsayılan Oluşturucu ayarları

CreateDefaultBuilderYöntemi:

  • İçerik kökünü tarafından döndürülen yola ayarlar GetCurrentDirectory .
  • Ana bilgisayar yapılandırmasını şuradan yükler:
    • Ön eki olan ortam değişkenleri DOTNET_ .
    • Komut satırı bağımsız değişkenleri.
  • Uygulama yapılandırmasını şuradan yükler:
    • appsettings.json.
    • appSettings. {Environment}. JSON.
    • Uygulama ortamda çalıştırıldığında Kullanıcı gizli dizileri Development .
    • Ortam değişkenleri.
    • Komut satırı bağımsız değişkenleri.
  • Aşağıdaki günlük sağlayıcılarını ekler:
    • Konsol
    • Hata Ayıklama
    • EventSource
    • Olay günlüğü (yalnızca Windows üzerinde çalışırken)
  • Ortam geliştirme sırasında kapsam doğrulaması ve bağımlılık doğrulaması etkinleştirilir.

ConfigureWebHostDefaultsYöntemi:

bu makalede daha sonra tüm uygulama türleri ve Ayarlar web apps bölümlerine yönelik Ayarlar, varsayılan oluşturucu ayarlarının nasıl geçersiz kılınacağını göstermektedir.

Framework tarafından sunulan hizmetler

Aşağıdaki hizmetler otomatik olarak kaydedilir:

Framework tarafından sunulan hizmetler hakkında daha fazla bilgi için bkz ASP.NET Core bağımlılık ekleme ..

Ihostapplicationlifetime

IHostApplicationLifetime IApplicationLifetime Başlatma sonrası ve düzgün kapanma görevlerini işlemek için herhangi bir sınıfa (eski adıyla) hizmetini ekleyin. Arabirimdeki üç özellik, uygulama başlatma ve uygulama durdurma olay işleyicisi yöntemlerini kaydetmek için kullanılan iptal belirteçleridir. Arabirim Ayrıca bir yöntemi içerir StopApplication .

Aşağıdaki örnek, IHostedService olayları kaydeden bir uygulamasıdır IHostApplicationLifetime :

internal class LifetimeEventsHostedService : IHostedService
{
    private readonly ILogger _logger;
    private readonly IHostApplicationLifetime _appLifetime;

    public LifetimeEventsHostedService(
        ILogger<LifetimeEventsHostedService> logger, 
        IHostApplicationLifetime appLifetime)
    {
        _logger = logger;
        _appLifetime = appLifetime;
    }

    public Task StartAsync(CancellationToken cancellationToken)
    {
        _appLifetime.ApplicationStarted.Register(OnStarted);
        _appLifetime.ApplicationStopping.Register(OnStopping);
        _appLifetime.ApplicationStopped.Register(OnStopped);

        return Task.CompletedTask;
    }

    public Task StopAsync(CancellationToken cancellationToken)
    {
        return Task.CompletedTask;
    }

    private void OnStarted()
    {
        _logger.LogInformation("OnStarted has been called.");

        // Perform post-startup activities here
    }

    private void OnStopping()
    {
        _logger.LogInformation("OnStopping has been called.");

        // Perform on-stopping activities here
    }

    private void OnStopped()
    {
        _logger.LogInformation("OnStopped has been called.");

        // Perform post-stopped activities here
    }
}

Ihostlifetime

IHostLifetimeUygulama, ana bilgisayar başladığında ve durdurulduğunda denetler. Kaydedilen son uygulama kullanılır.

Microsoft.Extensions.Hosting.Internal.ConsoleLifetime Varsayılan IHostLifetime uygulama. ConsoleLifetime:

Ihostenvironment

IHostEnvironmentAşağıdaki ayarlarla ilgili bilgi almak için hizmeti bir sınıfa ekleyin:

Web Apps, IWebHostEnvironment WebRootPath öğesini devralan IHostEnvironment ve ekleyen arabirimini uygular.

Konak yapılandırması

Ana bilgisayar yapılandırması, uygulamanın özellikleri için kullanılır IHostEnvironment .

Ana Bilgisayar Yapılandırması içinde HostBuilderContext.Configurlama tarafından kullanılabilir ConfigureAppConfiguration . Sonra ConfigureAppConfiguration , HostBuilderContext.Configuration uygulama yapılandırması ile değiştirilmiştir.

Konak yapılandırması eklemek için üzerinde öğesini ConfigureHostConfiguration çağırın IHostBuilder . ConfigureHostConfiguration , eklenebilir sonuçlarla birden çok kez çağrılabilir. Ana bilgisayar, belirli bir anahtardaki bir değeri en son belirleyen seçeneği kullanır.

Ön ek DOTNET_ ve komut satırı bağımsız değişkenlerine sahip ortam değişkeni sağlayıcısı tarafından dahildir CreateDefaultBuilder . Web Apps için, ön ekine sahip ortam değişkeni sağlayıcısı ASPNETCORE_ eklenir. Ortam değişkenleri okurken ön ek kaldırılır. Örneğin, için ortam değişkeni değeri, ASPNETCORE_ENVIRONMENT anahtar için ana bilgisayar yapılandırma değeri olur environment .

Aşağıdaki örnek ana bilgisayar yapılandırması oluşturur:

// using Microsoft.Extensions.Configuration;

Host.CreateDefaultBuilder(args)
    .ConfigureHostConfiguration(configHost =>
    {
        configHost.SetBasePath(Directory.GetCurrentDirectory());
        configHost.AddJsonFile("hostsettings.json", optional: true);
        configHost.AddEnvironmentVariables(prefix: "PREFIX_");
        configHost.AddCommandLine(args);
    });

Uygulama yapılandırması

Uygulama yapılandırması, üzerinde çağırarak oluşturulur ConfigureAppConfiguration IHostBuilder . ConfigureAppConfiguration , eklenebilir sonuçlarla birden çok kez çağrılabilir. Uygulama, belirli bir anahtardaki bir değeri en son belirleyen seçeneği kullanır.

Tarafından oluşturulan yapılandırma, ConfigureAppConfiguration sonraki işlemler ve dı hizmeti olarak HostBuilderContext.Config bir hizmet olarak sunulmaktadır. Konak yapılandırması, uygulama yapılandırmasına de eklenir.

Daha fazla bilgi için ASP.NET Core yapılandırmakonusuna bakın.

tüm uygulama türleri için Ayarlar

Bu bölüm, hem HTTP hem de HTTP olmayan iş yükleri için uygulanan konak ayarlarını listeler. Varsayılan olarak, bu ayarları yapılandırmak için kullanılan ortam değişkenlerinin bir DOTNET_ veya öneki olabilir ASPNETCORE_ . Daha fazla bilgi için Varsayılan Oluşturucu ayarları bölümüne bakın.

ApplicationName

Ihostenvironment. ApplicationName özelliği konak oluşturma sırasında konak yapılandırmasından ayarlanır.

Anahtar: applicationName
Şunu yazın: string
Varsayılan: uygulamanın giriş noktasını içeren derlemenin adı.
Ortam değişkeni: <PREFIX_>APPLICATIONNAME

Bu değeri ayarlamak için ortam değişkenini kullanın.

ContentRoot

Ihostenvironment. ContentRootPath özelliği, konağın içerik dosyalarını aramaya başladığı yeri belirler. Yol yoksa, ana bilgisayar başlatılamaz.

Anahtar: contentRoot
Şunu yazın: string
Varsayılan: uygulama derlemesinin bulunduğu klasör.
Ortam değişkeni: <PREFIX_>CONTENTROOT

Bu değeri ayarlamak için, ortam değişkenini kullanın veya üzerinde arama UseContentRoot yapın IHostBuilder :

Host.CreateDefaultBuilder(args)
    .UseContentRoot("c:\\content-root")
    //...

Daha fazla bilgi için bkz.

EnvironmentName

Ihostenvironment. EnvironmentName özelliği herhangi bir değere ayarlanabilir. Çerçeve tanımlı değerler,, Development Staging ve içerir Production . Değerler büyük/küçük harfe duyarlı değildir.

Anahtar: environment
Şunu yazın: string
Varsayılan: Production
Ortam değişkeni: <PREFIX_>ENVIRONMENT

Bu değeri ayarlamak için, ortam değişkenini kullanın veya üzerinde arama UseEnvironment yapın IHostBuilder :

Host.CreateDefaultBuilder(args)
    .UseEnvironment("Development")
    //...

ShutdownTimeout

Hostoptions. ShutdownTimeout , için zaman aşımını ayarlar StopAsync . Varsayılan değer beş saniyedir. Zaman aşımı süresi boyunca ana bilgisayar:

Tüm barındırılan hizmetler durmadan önce zaman aşımı süresi dolarsa, uygulama kapandığında kalan etkin hizmetler durdurulur. Hizmetler, işlemeyi tamamlamadıklarında bile durur. Hizmetlerin durdurulması için ek süre gerekiyorsa, zaman aşımını artırın.

Anahtar: shutdownTimeoutSeconds
Şunu yazın: int
Varsayılan: 5 saniye
Ortam değişkeni: <PREFIX_>SHUTDOWNTIMEOUTSECONDS

Bu değeri ayarlamak için, ortam değişkenini kullanın veya yapılandırın HostOptions . Aşağıdaki örnek, zaman aşımını 20 saniye olarak ayarlar:

Host.CreateDefaultBuilder(args)
    .ConfigureServices((hostContext, services) =>
    {
        services.Configure<HostOptions>(option =>
        {
            option.ShutdownTimeout = System.TimeSpan.FromSeconds(20);
        });
    });

Değişiklik sırasında uygulama yapılandırması yeniden yüklemeyi devre dışı bırak

Varsayılanolarak appsettings.json ve appSettings. { Ortam}. JSON , dosya değiştiğinde yeniden yüklenir. ASP.NET Core 5,0 veya sonraki bir sürümde yeniden yükleme davranışını devre dışı bırakmak için hostBuilder:reloadConfigOnChange anahtarı olarak ayarlayın false .

Anahtar: hostBuilder:reloadConfigOnChange
Tür: bool ( true veya 1 )
Varsayılan: true
Komut satırı bağımsız değişkeni: hostBuilder:reloadConfigOnChange
Ortam değişkeni: <PREFIX_>hostBuilder:reloadConfigOnChange

Uyarı

İki nokta ( : ) ayırıcısı tüm platformlarda ortam değişkeni hiyerarşik anahtarlarla birlikte çalışmaz. Daha fazla bilgi için bkz. ortam değişkenleri.

web apps için Ayarlar

Bazı konak ayarları yalnızca HTTP iş yükleri için geçerlidir. Varsayılan olarak, bu ayarları yapılandırmak için kullanılan ortam değişkenlerinin bir DOTNET_ veya öneki olabilir ASPNETCORE_ .

Üzerinde uzantı yöntemleri IWebHostBuilder Bu ayarlar için kullanılabilir. webBuilder IWebHostBuilder Aşağıdaki örnekte olduğu gibi, ' nin bir örneği olduğunu belirten uzantı yöntemlerinin nasıl çağrılacağını gösteren kod örnekleri:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.CaptureStartupErrors(true);
            webBuilder.UseStartup<Startup>();
        });

CaptureStartupErrors

Ne zaman false , başlatma sırasında oluşan hata, ana bilgisayardan çıkılıyor. Ne zaman true , ana bilgisayar başlangıç sırasında özel durumları yakalar ve sunucuyu başlatmaya çalışır.

Anahtar: captureStartupErrors
Tür: bool ( true veya 1 )
Varsayılan: varsayılan olarak, false uygulamanın IIS 'nin arkasında çalıştığı durumlar için varsayılan değer olarak Kestrel kullanılır true .
Ortam değişkeni: <PREFIX_>CAPTURESTARTUPERRORS

Bu değeri ayarlamak için yapılandırma veya çağırma kullanın CaptureStartupErrors :

webBuilder.CaptureStartupErrors(true);

DetailedErrors

Etkinleştirildiğinde veya ortam olduğunda, Development uygulama ayrıntılı hataları yakalar.

Anahtar: detailedErrors
Tür: bool ( true veya 1 )
Varsayılan: false
Ortam değişkeni: <PREFIX_>_DETAILEDERRORS

Bu değeri ayarlamak için yapılandırma veya çağırma kullanın UseSetting :

webBuilder.UseSetting(WebHostDefaults.DetailedErrorsKey, "true");

HostingStartupAssemblies

Başlangıçta yüklenecek başlangıç derlemelerinin barındırılması için noktalı virgülle ayrılmış bir dize. Yapılandırma değeri boş bir dize olarak varsayılan olsa da, barındırma başlangıç derlemeleri her zaman uygulamanın derlemesini içerir. Barındırma başlangıç derlemeleri sağlandığında, uygulama başlangıç sırasında ortak hizmetlerini oluşturduğunda yükleme için uygulamanın derlemesine eklenir.

Anahtar: hostingStartupAssemblies
Şunu yazın: string
Varsayılan: boş dize
Ortam değişkeni: <PREFIX_>_HOSTINGSTARTUPASSEMBLIES

Bu değeri ayarlamak için yapılandırma veya çağırma kullanın UseSetting :

webBuilder.UseSetting(WebHostDefaults.HostingStartupAssembliesKey, "assembly1;assembly2");

HostingStartupExcludeAssemblies

Başlangıçta dışlamak üzere başlangıç derlemelerinin barındırılması için noktalı virgülle ayrılmış bir dize.

Anahtar: hostingStartupExcludeAssemblies
Şunu yazın: string
Varsayılan: boş dize
Ortam değişkeni: <PREFIX_>_HOSTINGSTARTUPEXCLUDEASSEMBLIES

Bu değeri ayarlamak için yapılandırma veya çağırma kullanın UseSetting :

webBuilder.UseSetting(WebHostDefaults.HostingStartupExcludeAssembliesKey, "assembly1;assembly2");

HTTPS_Port

HTTPS yeniden yönlendirme bağlantı noktası. Https zorlamabölümünde kullanılır.

Anahtar: https_port
Şunu yazın: string
Varsayılan: varsayılan değer ayarlı değildir.
Ortam değişkeni: <PREFIX_>HTTPS_PORT

Bu değeri ayarlamak için yapılandırma veya çağırma kullanın UseSetting :

webBuilder.UseSetting("https_port", "8080");

Tercih Hostingurl 'Leri

Konağın uygulamayla yapılandırılmış URL 'Ler yerine ile yapılandırılan URL 'lerde dinleme yapıp kullanmayacağını belirtir IWebHostBuilder IServer .

Anahtar: preferHostingUrls
Tür: bool ( true veya 1 )
Varsayılan: true
Ortam değişkeni: <PREFIX_>_PREFERHOSTINGURLS

Bu değeri ayarlamak için, ortam değişkenini veya çağrısını kullanın PreferHostingUrls :

webBuilder.PreferHostingUrls(false);

Koruyucu Thostınstartup

Uygulamanın derlemesi tarafından yapılandırılan başlatma derlemelerinin barındırılması dahil olmak üzere, barındırma başlangıç derlemelerinin otomatik yüklenmesini engeller. Daha fazla bilgi için bkz. ASP.NET Core 'de barındırma başlangıç derlemelerini kullanın.

Anahtar: preventHostingStartup
Tür: bool ( true veya 1 )
Varsayılan: false
Ortam değişkeni: <PREFIX_>_PREVENTHOSTINGSTARTUP

Bu değeri ayarlamak için, ortam değişkenini veya çağrısını kullanın UseSetting :

webBuilder.UseSetting(WebHostDefaults.PreventHostingStartupKey, "true");

StartupAssembly

Sınıfı aramak için bütünleştirilmiş kod Startup .

Anahtar: startupAssembly
Şunu yazın: string
Varsayılan: uygulamanın derlemesi
Ortam değişkeni: <PREFIX_>STARTUPASSEMBLY

Bu değeri ayarlamak için, ortam değişkenini veya çağrısını kullanın UseStartup . UseStartup bir derleme adı ( string ) veya bir tür () alabilir TStartup . Birden çok UseStartup yöntem çağrılırsa, son bir öncelik alır.

webBuilder.UseStartup("StartupAssemblyName");
webBuilder.UseStartup<Startup>();

URL’ler

Sunucu istekleri için dinlemesi gereken bağlantı noktaları ve protokollerle, noktalı virgülle ayrılmış IP adresleri listesi veya ana bilgisayar adresleri. Örneğin, http://localhost:123. *Sunucunun belirtilen bağlantı noktasını ve Protokolü (örneğin,) kullanarak herhangi BIR IP adresi veya ana bilgisayar için istekleri dinlemesi gerektiğini belirtmek için "" kullanın http://*:5000 . Protokol ( http:// veya https:// ) her URL 'ye dahil edilmiş olmalıdır. Desteklenen biçimler sunucular arasında farklılık gösterir.

Anahtar: urls
Şunu yazın: string
Varsayılan: http://localhost:5000 ve https://localhost:5001
Ortam değişkeni: <PREFIX_>URLS

Bu değeri ayarlamak için, ortam değişkenini veya çağrısını kullanın UseUrls :

webBuilder.UseUrls("http://*:5000;http://localhost:5001;https://hostname:5002");

Kestrel kendi uç nokta yapılandırması API 'sine sahiptir. Daha fazla bilgi için bkz. Web sunucusu için ASP.NET Core Kestrel yapılandırma.

WebRoot

Iwebhostenvironment. WebRootPath özelliği, uygulamanın statik varlıklarının göreli yolunu belirler. Yol yoksa, Hayır-op dosya sağlayıcısı kullanılır.

Anahtar: webroot
Şunu yazın: string
Varsayılan: varsayılan wwwroot . {Content root}/Wwwroot yolu var olmalıdır.
Ortam değişkeni: <PREFIX_>WEBROOT

Bu değeri ayarlamak için, ortam değişkenini kullanın veya üzerinde arama UseWebRoot yapın IWebHostBuilder :

webBuilder.UseWebRoot("public");

Daha fazla bilgi için bkz.

Konak ömrünü yönetme

IHostUygulamayı başlatmak ve durdurmak için oluşturulan uygulamadaki Yöntemleri çağırın. Bu yöntemler IHostedService , hizmet kapsayıcısına kayıtlı tüm uygulamaları etkiler.

Çalıştır

Run uygulamayı çalıştırır ve ana bilgisayarı kapatıncaya kadar çağıran iş parçacığını engeller.

RunAsync

RunAsync uygulamayı çalıştırır ve Task iptal belirteci veya kapanışı tetiklendiğinde tamamlanmış bir döndürür.

RunConsoleAsync

RunConsoleAsyncKonsol desteğini sağlar, Konağı oluşturur ve başlatır ve CTRL + C/sigint veya sigterm 'in kapatılmasını bekler.

Başlangıç

Start Konağı zaman uyumlu olarak başlatır.

StartAsync

StartAsync Konağı başlatır ve Task iptal belirteci ya da kapatması tetiklendiğinde tamamlanmış bir döndürür.

WaitForStartAsync , ' nin başlangıcında çağrılır StartAsync ve devam etmeden önce tamamlanana kadar bekler. Bu, bir dış olay tarafından sinyallene kadar başlatmayı geciktirmek için kullanılabilir.

StopAsync

StopAsync belirtilen zaman aşımı süresi içinde Konağı durdurmaya çalışır.

Waitforkapatması

WaitForShutdown, CTRL + C/sigint veya sigterm gibi bir ıhostlifetime tarafından tetiklenene kadar çağıran iş parçacığını engeller.

WaitForShutdownAsync

WaitForShutdownAsyncTaskverilen belirteç ve çağrılar aracılığıyla kapatılma tetiklendiğinde tamamlanan bir döndürür StopAsync .

Dış denetim

Ana bilgisayar ömrünün doğrudan denetimi dışarıdan çağrılabilen yöntemler kullanılarak sağlanabilir:

public class Program
{
    private IHost _host;

    public Program()
    {
        _host = new HostBuilder()
            .Build();
    }

    public async Task StartAsync()
    {
        _host.StartAsync();
    }

    public async Task StopAsync()
    {
        using (_host)
        {
            await _host.StopAsync(TimeSpan.FromSeconds(5));
        }
    }
}

ASP.NET Core şablonları bir .net Core genel konağı () oluşturur HostBuilder .

Bu konuda, ASP.NET Core .NET genel Host kullanımı hakkında bilgi verilmektedir. Konsol uygulamalarında .NET genel ana bilgisayarı kullanma hakkında bilgi için bkz. .NET genel ana bilgisayar.

Ana bilgisayar tanımı

Ana bilgisayar , bir uygulamanın kaynaklarını kapsülleyen bir nesnedir, örneğin:

  • Bağımlılık ekleme (dı)
  • Günlüğe Kaydetme
  • Yapılandırma
  • IHostedService uygulamalarını

Bir konak başlatıldığında, IHostedService.StartAsync IHostedService hizmet kapsayıcısının barındırılan hizmetler koleksiyonunda kayıtlı her bir uygulamasına çağrı yapılır. Bir Web uygulamasında, IHostedService uygulamalardan biri http sunucu uygulamasıBaşlatan bir Web hizmetidir.

Uygulamanın tüm birbirine bağlı kaynaklarını tek bir nesnede dahil etmek için başlıca neden, yaşam süresi yönetimi: uygulama başlatma ve düzgün kapanma üzerinde denetim.

Konak ayarlama

Ana bilgisayar genellikle sınıfında kodla yapılandırılır, oluşturulur ve çalıştırılır Program . MainYöntemi:

  • CreateHostBuilderBir Oluşturucu nesnesi oluşturmak ve yapılandırmak için bir yöntem çağırır.
  • Build Run Oluşturucu nesnesindeki çağrılar ve Yöntemler.

ASP.NET Core web şablonları, genel bir konak oluşturmak için aşağıdaki kodu oluşturur:

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}

Aşağıdaki kod, HTTP olmayan iş yükünü kullanan genel bir konak oluşturur. IHostedServiceUygulama, dı kapsayıcısına eklenir:

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureServices((hostContext, services) =>
            {
               services.AddHostedService<Worker>();
            });
}

Bir HTTP iş yükü için Main yöntem aynıdır ancak çağrılır CreateHostBuilder ConfigureWebHostDefaults :

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();
        });

yukarıdaki kod ASP.NET Core şablonları tarafından oluşturulur.

Uygulama Entity Framework Core kullanıyorsa, yöntemin adını veya imzasını değiştirmeyin CreateHostBuilder . Entity Framework Core araçları , CreateHostBuilder uygulamayı çalıştırmadan Konağı yapılandıran bir yöntem bulmayı bekler. Daha fazla bilgi için bkz. Tasarım zamanı DbContext oluşturma.

Varsayılan Oluşturucu ayarları

CreateDefaultBuilderYöntemi:

  • İçerik kökünü tarafından döndürülen yola ayarlar GetCurrentDirectory .
  • Ana bilgisayar yapılandırmasını şuradan yükler:
    • Ön eki olan ortam değişkenleri DOTNET_ .
    • Komut satırı bağımsız değişkenleri.
  • Uygulama yapılandırmasını şuradan yükler:
    • appsettings.json.
    • appSettings. {Environment}. JSON.
    • Uygulama ortamda çalıştırıldığında Kullanıcı gizli dizileri Development .
    • Ortam değişkenleri.
    • Komut satırı bağımsız değişkenleri.
  • Aşağıdaki günlük sağlayıcılarını ekler:
    • Konsol
    • Hata Ayıklama
    • EventSource
    • Olay günlüğü (yalnızca Windows üzerinde çalışırken)
  • Ortam geliştirme sırasında kapsam doğrulaması ve bağımlılık doğrulaması etkinleştirilir.

ConfigureWebHostDefaultsYöntemi:

bu makalede daha sonra tüm uygulama türleri ve Ayarlar web apps bölümlerine yönelik Ayarlar, varsayılan oluşturucu ayarlarının nasıl geçersiz kılınacağını göstermektedir.

Framework tarafından sunulan hizmetler

Aşağıdaki hizmetler otomatik olarak kaydedilir:

Framework tarafından sunulan hizmetler hakkında daha fazla bilgi için bkz ASP.NET Core bağımlılık ekleme ..

Ihostapplicationlifetime

IHostApplicationLifetime IApplicationLifetime Başlatma sonrası ve düzgün kapanma görevlerini işlemek için herhangi bir sınıfa (eski adıyla) hizmetini ekleyin. Arabirimdeki üç özellik, uygulama başlatma ve uygulama durdurma olay işleyicisi yöntemlerini kaydetmek için kullanılan iptal belirteçleridir. Arabirim Ayrıca bir yöntemi içerir StopApplication .

Aşağıdaki örnek, IHostedService olayları kaydeden bir uygulamasıdır IHostApplicationLifetime :

internal class LifetimeEventsHostedService : IHostedService
{
    private readonly ILogger _logger;
    private readonly IHostApplicationLifetime _appLifetime;

    public LifetimeEventsHostedService(
        ILogger<LifetimeEventsHostedService> logger, 
        IHostApplicationLifetime appLifetime)
    {
        _logger = logger;
        _appLifetime = appLifetime;
    }

    public Task StartAsync(CancellationToken cancellationToken)
    {
        _appLifetime.ApplicationStarted.Register(OnStarted);
        _appLifetime.ApplicationStopping.Register(OnStopping);
        _appLifetime.ApplicationStopped.Register(OnStopped);

        return Task.CompletedTask;
    }

    public Task StopAsync(CancellationToken cancellationToken)
    {
        return Task.CompletedTask;
    }

    private void OnStarted()
    {
        _logger.LogInformation("OnStarted has been called.");

        // Perform post-startup activities here
    }

    private void OnStopping()
    {
        _logger.LogInformation("OnStopping has been called.");

        // Perform on-stopping activities here
    }

    private void OnStopped()
    {
        _logger.LogInformation("OnStopped has been called.");

        // Perform post-stopped activities here
    }
}

Ihostlifetime

IHostLifetimeUygulama, ana bilgisayar başladığında ve durdurulduğunda denetler. Kaydedilen son uygulama kullanılır.

Microsoft.Extensions.Hosting.Internal.ConsoleLifetime Varsayılan IHostLifetime uygulama. ConsoleLifetime:

Ihostenvironment

IHostEnvironmentAşağıdaki ayarlarla ilgili bilgi almak için hizmeti bir sınıfa ekleyin:

Web Apps, IWebHostEnvironment WebRootPath öğesini devralan IHostEnvironment ve ekleyen arabirimini uygular.

Konak yapılandırması

Ana bilgisayar yapılandırması, uygulamanın özellikleri için kullanılır IHostEnvironment .

Ana Bilgisayar Yapılandırması içinde HostBuilderContext.Configurlama tarafından kullanılabilir ConfigureAppConfiguration . Sonra ConfigureAppConfiguration , HostBuilderContext.Configuration uygulama yapılandırması ile değiştirilmiştir.

Konak yapılandırması eklemek için üzerinde öğesini ConfigureHostConfiguration çağırın IHostBuilder . ConfigureHostConfiguration , eklenebilir sonuçlarla birden çok kez çağrılabilir. Ana bilgisayar, belirli bir anahtardaki bir değeri en son belirleyen seçeneği kullanır.

Ön ek DOTNET_ ve komut satırı bağımsız değişkenlerine sahip ortam değişkeni sağlayıcısı tarafından dahildir CreateDefaultBuilder . Web Apps için, ön ekine sahip ortam değişkeni sağlayıcısı ASPNETCORE_ eklenir. Ortam değişkenleri okurken ön ek kaldırılır. Örneğin, için ortam değişkeni değeri, ASPNETCORE_ENVIRONMENT anahtar için ana bilgisayar yapılandırma değeri olur environment .

Aşağıdaki örnek ana bilgisayar yapılandırması oluşturur:

// using Microsoft.Extensions.Configuration;

Host.CreateDefaultBuilder(args)
    .ConfigureHostConfiguration(configHost =>
    {
        configHost.SetBasePath(Directory.GetCurrentDirectory());
        configHost.AddJsonFile("hostsettings.json", optional: true);
        configHost.AddEnvironmentVariables(prefix: "PREFIX_");
        configHost.AddCommandLine(args);
    });

Uygulama yapılandırması

Uygulama yapılandırması, üzerinde çağırarak oluşturulur ConfigureAppConfiguration IHostBuilder . ConfigureAppConfiguration , eklenebilir sonuçlarla birden çok kez çağrılabilir. Uygulama, belirli bir anahtardaki bir değeri en son belirleyen seçeneği kullanır.

Tarafından oluşturulan yapılandırma, ConfigureAppConfiguration sonraki işlemler ve dı hizmeti olarak HostBuilderContext.Config bir hizmet olarak sunulmaktadır. Konak yapılandırması, uygulama yapılandırmasına de eklenir.

Daha fazla bilgi için ASP.NET Core yapılandırmakonusuna bakın.

tüm uygulama türleri için Ayarlar

Bu bölüm, hem HTTP hem de HTTP olmayan iş yükleri için uygulanan konak ayarlarını listeler. Varsayılan olarak, bu ayarları yapılandırmak için kullanılan ortam değişkenlerinin bir DOTNET_ veya öneki olabilir ASPNETCORE_ .

ApplicationName

Ihostenvironment. ApplicationName özelliği konak oluşturma sırasında konak yapılandırmasından ayarlanır.

Anahtar: applicationName
Şunu yazın: string
Varsayılan: uygulamanın giriş noktasını içeren derlemenin adı.
Ortam değişkeni: <PREFIX_>APPLICATIONNAME

Bu değeri ayarlamak için ortam değişkenini kullanın.

ContentRoot

Ihostenvironment. ContentRootPath özelliği, konağın içerik dosyalarını aramaya başladığı yeri belirler. Yol yoksa, ana bilgisayar başlatılamaz.

Anahtar: contentRoot
Şunu yazın: string
Varsayılan: uygulama derlemesinin bulunduğu klasör.
Ortam değişkeni: <PREFIX_>CONTENTROOT

Bu değeri ayarlamak için, ortam değişkenini kullanın veya üzerinde arama UseContentRoot yapın IHostBuilder :

Host.CreateDefaultBuilder(args)
    .UseContentRoot("c:\\content-root")
    //...

Daha fazla bilgi için bkz.

EnvironmentName

Ihostenvironment. EnvironmentName özelliği herhangi bir değere ayarlanabilir. Çerçeve tanımlı değerler,, Development Staging ve içerir Production . Değerler büyük/küçük harfe duyarlı değildir.

Anahtar: environment
Şunu yazın: string
Varsayılan: Production
Ortam değişkeni: <PREFIX_>ENVIRONMENT

Bu değeri ayarlamak için, ortam değişkenini kullanın veya üzerinde arama UseEnvironment yapın IHostBuilder :

Host.CreateDefaultBuilder(args)
    .UseEnvironment("Development")
    //...

ShutdownTimeout

Hostoptions. ShutdownTimeout , için zaman aşımını ayarlar StopAsync . Varsayılan değer beş saniyedir. Zaman aşımı süresi boyunca ana bilgisayar:

Tüm barındırılan hizmetler durmadan önce zaman aşımı süresi dolarsa, uygulama kapandığında kalan etkin hizmetler durdurulur. Hizmetler, işlemeyi tamamlamadıklarında bile durur. Hizmetlerin durdurulması için ek süre gerekiyorsa, zaman aşımını artırın.

Anahtar: shutdownTimeoutSeconds
Şunu yazın: int
Varsayılan: 5 saniye
Ortam değişkeni: <PREFIX_>SHUTDOWNTIMEOUTSECONDS

Bu değeri ayarlamak için, ortam değişkenini kullanın veya yapılandırın HostOptions . Aşağıdaki örnek, zaman aşımını 20 saniye olarak ayarlar:

Host.CreateDefaultBuilder(args)
    .ConfigureServices((hostContext, services) =>
    {
        services.Configure<HostOptions>(option =>
        {
            option.ShutdownTimeout = System.TimeSpan.FromSeconds(20);
        });
    });

web apps için Ayarlar

Bazı konak ayarları yalnızca HTTP iş yükleri için geçerlidir. Varsayılan olarak, bu ayarları yapılandırmak için kullanılan ortam değişkenlerinin bir DOTNET_ veya öneki olabilir ASPNETCORE_ .

Üzerinde uzantı yöntemleri IWebHostBuilder Bu ayarlar için kullanılabilir. webBuilder IWebHostBuilder Aşağıdaki örnekte olduğu gibi, ' nin bir örneği olduğunu belirten uzantı yöntemlerinin nasıl çağrılacağını gösteren kod örnekleri:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.CaptureStartupErrors(true);
            webBuilder.UseStartup<Startup>();
        });

CaptureStartupErrors

Ne zaman false , başlatma sırasında oluşan hata, ana bilgisayardan çıkılıyor. Ne zaman true , ana bilgisayar başlangıç sırasında özel durumları yakalar ve sunucuyu başlatmaya çalışır.

Anahtar: captureStartupErrors
Tür: bool ( true veya 1 )
Varsayılan: varsayılan olarak, false uygulamanın IIS 'nin arkasında çalıştığı durumlar için varsayılan değer olarak Kestrel kullanılır true .
Ortam değişkeni: <PREFIX_>CAPTURESTARTUPERRORS

Bu değeri ayarlamak için yapılandırma veya çağırma kullanın CaptureStartupErrors :

webBuilder.CaptureStartupErrors(true);

DetailedErrors

Etkinleştirildiğinde veya ortam olduğunda, Development uygulama ayrıntılı hataları yakalar.

Anahtar: detailedErrors
Tür: bool ( true veya 1 )
Varsayılan: false
Ortam değişkeni: <PREFIX_>_DETAILEDERRORS

Bu değeri ayarlamak için yapılandırma veya çağırma kullanın UseSetting :

webBuilder.UseSetting(WebHostDefaults.DetailedErrorsKey, "true");

HostingStartupAssemblies

Başlangıçta yüklenecek başlangıç derlemelerinin barındırılması için noktalı virgülle ayrılmış bir dize. Yapılandırma değeri boş bir dize olarak varsayılan olsa da, barındırma başlangıç derlemeleri her zaman uygulamanın derlemesini içerir. Barındırma başlangıç derlemeleri sağlandığında, uygulama başlangıç sırasında ortak hizmetlerini oluşturduğunda yükleme için uygulamanın derlemesine eklenir.

Anahtar: hostingStartupAssemblies
Şunu yazın: string
Varsayılan: boş dize
Ortam değişkeni: <PREFIX_>_HOSTINGSTARTUPASSEMBLIES

Bu değeri ayarlamak için yapılandırma veya çağırma kullanın UseSetting :

webBuilder.UseSetting(WebHostDefaults.HostingStartupAssembliesKey, "assembly1;assembly2");

HostingStartupExcludeAssemblies

Başlangıçta dışlamak üzere başlangıç derlemelerinin barındırılması için noktalı virgülle ayrılmış bir dize.

Anahtar: hostingStartupExcludeAssemblies
Şunu yazın: string
Varsayılan: boş dize
Ortam değişkeni: <PREFIX_>_HOSTINGSTARTUPEXCLUDEASSEMBLIES

Bu değeri ayarlamak için yapılandırma veya çağırma kullanın UseSetting :

webBuilder.UseSetting(WebHostDefaults.HostingStartupExcludeAssembliesKey, "assembly1;assembly2");

HTTPS_Port

HTTPS yeniden yönlendirme bağlantı noktası. Https zorlamabölümünde kullanılır.

Anahtar: https_port
Şunu yazın: string
Varsayılan: varsayılan değer ayarlı değildir.
Ortam değişkeni: <PREFIX_>HTTPS_PORT

Bu değeri ayarlamak için yapılandırma veya çağırma kullanın UseSetting :

webBuilder.UseSetting("https_port", "8080");

Tercih Hostingurl 'Leri

Konağın uygulamayla yapılandırılmış URL 'Ler yerine ile yapılandırılan URL 'lerde dinleme yapıp kullanmayacağını belirtir IWebHostBuilder IServer .

Anahtar: preferHostingUrls
Tür: bool ( true veya 1 )
Varsayılan: true
Ortam değişkeni: <PREFIX_>_PREFERHOSTINGURLS

Bu değeri ayarlamak için, ortam değişkenini veya çağrısını kullanın PreferHostingUrls :

webBuilder.PreferHostingUrls(false);

Koruyucu Thostınstartup

Uygulamanın derlemesi tarafından yapılandırılan başlatma derlemelerinin barındırılması dahil olmak üzere, barındırma başlangıç derlemelerinin otomatik yüklenmesini engeller. Daha fazla bilgi için bkz. ASP.NET Core 'de barındırma başlangıç derlemelerini kullanın.

Anahtar: preventHostingStartup
Tür: bool ( true veya 1 )
Varsayılan: false
Ortam değişkeni: <PREFIX_>_PREVENTHOSTINGSTARTUP

Bu değeri ayarlamak için, ortam değişkenini veya çağrısını kullanın UseSetting :

webBuilder.UseSetting(WebHostDefaults.PreventHostingStartupKey, "true");

StartupAssembly

Sınıfı aramak için bütünleştirilmiş kod Startup .

Anahtar: startupAssembly
Şunu yazın: string
Varsayılan: uygulamanın derlemesi
Ortam değişkeni: <PREFIX_>STARTUPASSEMBLY

Bu değeri ayarlamak için, ortam değişkenini veya çağrısını kullanın UseStartup . UseStartup bir derleme adı ( string ) veya bir tür () alabilir TStartup . Birden çok UseStartup yöntem çağrılırsa, son bir öncelik alır.

webBuilder.UseStartup("StartupAssemblyName");
webBuilder.UseStartup<Startup>();

URL’ler

Sunucu istekleri için dinlemesi gereken bağlantı noktaları ve protokollerle, noktalı virgülle ayrılmış IP adresleri listesi veya ana bilgisayar adresleri. Örneğin, http://localhost:123. *Sunucunun belirtilen bağlantı noktasını ve Protokolü (örneğin,) kullanarak herhangi BIR IP adresi veya ana bilgisayar için istekleri dinlemesi gerektiğini belirtmek için "" kullanın http://*:5000 . Protokol ( http:// veya https:// ) her URL 'ye dahil edilmiş olmalıdır. Desteklenen biçimler sunucular arasında farklılık gösterir.

Anahtar: urls
Şunu yazın: string
Varsayılan: http://localhost:5000 ve https://localhost:5001
Ortam değişkeni: <PREFIX_>URLS

Bu değeri ayarlamak için, ortam değişkenini veya çağrısını kullanın UseUrls :

webBuilder.UseUrls("http://*:5000;http://localhost:5001;https://hostname:5002");

Kestrel kendi uç nokta yapılandırması API 'sine sahiptir. Daha fazla bilgi için bkz. KestrelASP.NET Core'de web sunucusu uygulaması.

WebRoot

Iwebhostenvironment. WebRootPath özelliği, uygulamanın statik varlıklarının göreli yolunu belirler. Yol yoksa, Hayır-op dosya sağlayıcısı kullanılır.

Anahtar: webroot
Şunu yazın: string
Varsayılan: varsayılan wwwroot . {Content root}/Wwwroot yolu var olmalıdır.
Ortam değişkeni: <PREFIX_>WEBROOT

Bu değeri ayarlamak için, ortam değişkenini kullanın veya üzerinde arama UseWebRoot yapın IWebHostBuilder :

webBuilder.UseWebRoot("public");

Daha fazla bilgi için bkz.

Konak ömrünü yönetme

IHostUygulamayı başlatmak ve durdurmak için oluşturulan uygulamadaki Yöntemleri çağırın. Bu yöntemler IHostedService , hizmet kapsayıcısına kayıtlı tüm uygulamaları etkiler.

Çalıştır

Run uygulamayı çalıştırır ve ana bilgisayarı kapatıncaya kadar çağıran iş parçacığını engeller.

RunAsync

RunAsync uygulamayı çalıştırır ve Task iptal belirteci veya kapanışı tetiklendiğinde tamamlanmış bir döndürür.

RunConsoleAsync

RunConsoleAsyncKonsol desteğini sağlar, Konağı oluşturur ve başlatır ve CTRL + C/sigint veya sigterm 'in kapatılmasını bekler.

Başlangıç

Start Konağı zaman uyumlu olarak başlatır.

StartAsync

StartAsync Konağı başlatır ve Task iptal belirteci ya da kapatması tetiklendiğinde tamamlanmış bir döndürür.

WaitForStartAsync , ' nin başlangıcında çağrılır StartAsync ve devam etmeden önce tamamlanana kadar bekler. Bu, bir dış olay tarafından sinyallene kadar başlatmayı geciktirmek için kullanılabilir.

StopAsync

StopAsync belirtilen zaman aşımı süresi içinde Konağı durdurmaya çalışır.

Waitforkapatması

WaitForShutdown, CTRL + C/sigint veya sigterm gibi bir ıhostlifetime tarafından tetiklenene kadar çağıran iş parçacığını engeller.

WaitForShutdownAsync

WaitForShutdownAsyncTaskverilen belirteç ve çağrılar aracılığıyla kapatılma tetiklendiğinde tamamlanan bir döndürür StopAsync .

Dış denetim

Ana bilgisayar ömrünün doğrudan denetimi dışarıdan çağrılabilen yöntemler kullanılarak sağlanabilir:

public class Program
{
    private IHost _host;

    public Program()
    {
        _host = new HostBuilder()
            .Build();
    }

    public async Task StartAsync()
    {
        _host.StartAsync();
    }

    public async Task StopAsync()
    {
        using (_host)
        {
            await _host.StopAsync(TimeSpan.FromSeconds(5));
        }
    }
}

ASP.NET Core uygulamalar bir konağı yapılandırıp başlatır. Ana bilgisayar, uygulama başlatma ve ömür yönetiminden sorumludur.

bu makalede HostBuilder , HTTP isteklerini işlemeyecek uygulamalar için kullanılan genel ana bilgisayar () ASP.NET Core ele alınmaktadır.

Genel konağın amacı, daha geniş bir konak senaryolarını etkinleştirmek üzere Web ana bilgisayar API 'sinden HTTP işlem hattını ayırmak için kullanılır. Yapılandırma, bağımlılık ekleme (dı) ve günlüğe kaydetme gibi çapraz kesme özelliğinden genel ana bilgisayar avantajı temel alınarak mesajlaşma, arka plan görevleri ve diğer HTTP olmayan iş yükleri.

genel ana bilgisayar ASP.NET Core 2,1 ' de yenidir ve web barındırma senaryolarında uygun değildir. Web barındırma senaryolarında Web konağınıkullanın. Genel ana bilgisayar gelecek bir sürümdeki Web konağını değiştirecek ve hem HTTP hem de HTTP olmayan senaryolarda birincil ana bilgisayar API 'SI olarak görev yapacak.

Örnek kodu görüntüleme veya indirme (nasıl indirileceği)

örnek uygulamayı Visual Studio Code' de çalıştırırken, dış veya tümleşik bir terminal kullanın. Örneği bir içinde çalıştırmayın internalConsole .

Konsolu Visual Studio Code ayarlamak için:

  1. Dosyasında . vscode/launch.js açın.
  2. .NET Core başlatma (konsol) yapılandırmasında konsol girişini bulun. Değeri ya da olarak ayarlayın externalTerminal integratedTerminal .

Giriş

Genel konak kitaplığı ad alanında kullanılabilir Microsoft.Extensions.Hosting ve Microsoft. Extensions. Hosting paketi tarafından sağlanır. Microsoft.Extensions.Hostingpaket, Microsoft.AspNetCore.App metapackage 'e dahildir (ASP.NET Core 2,1 veya üzeri).

IHostedService , kod yürütmeye yönelik giriş noktasıdır. Her IHostedService uygulama, ConfigureServices içinde hizmet kaydısırasında yürütülür. StartAsync , IHostedService konak başlatıldığında çağrılır ve StopAsync ana bilgisayar düzgün bir şekilde kapandığında ters kayıt sırasında çağrılır.

Konak ayarlama

IHostBuilder , kitaplıkların ve uygulamaların Konağı başlatmak, derlemek ve çalıştırmak için kullandığı ana bileşendir:

public static async Task Main(string[] args)
{
    var host = new HostBuilder()
        .Build();

    await host.RunAsync();
}

Seçenekler

HostOptions için seçenekleri yapılandırın IHost .

Kapatılma zaman aşımı

ShutdownTimeout zaman aşımını ayarlar StopAsync . Varsayılan değer beş saniyedir.

İçindeki aşağıdaki seçenek yapılandırması, Program.Main varsayılan beş saniyelik kapatılma zaman aşımını 20 saniyeye yükseltir:

var host = new HostBuilder()
    .ConfigureServices((hostContext, services) =>
    {
        services.Configure<HostOptions>(option =>
        {
            option.ShutdownTimeout = System.TimeSpan.FromSeconds(20);
        });
    })
    .Build();

Varsayılan hizmetler

Aşağıdaki hizmetler konak başlatma sırasında kaydedilir:

Konak yapılandırması

Ana bilgisayar yapılandırması şu şekilde oluşturulur:

Genişletme yöntemleri

Uygulama anahtarı (ad)

Ihostingenvironment. ApplicationName özelliği konak oluşturma sırasında konak yapılandırmasından ayarlanır. Değeri açıkça ayarlamak için, Hostdefaults. ApplicationKeykullanın:

Anahtar: applicationName
Şunu yazın: string
Varsayılan: uygulamanın giriş noktasını içeren derlemenin adı.
Şunu kullanarak ayarla:HostBuilderContext.HostingEnvironment.ApplicationName
Ortam değişkeni: <PREFIX_>APPLICATIONNAME ( <PREFIX_> isteğe bağlı ve Kullanıcı tanımlı)

İçerik kökü

Bu ayar, konağın içerik dosyalarını aramaya başladığı yeri belirler.

Anahtar: contentRoot
Şunu yazın: string
Varsayılan: uygulama derlemesinin bulunduğu klasörü varsayılan olarak belirler.
Şunu kullanarak ayarla:UseContentRoot
Ortam değişkeni: <PREFIX_>CONTENTROOT ( <PREFIX_> isteğe bağlı ve Kullanıcı tanımlı)

Yol yoksa, ana bilgisayar başlatılamaz.

var host = new HostBuilder()
    .UseContentRoot("c:\\<content-root>")

Daha fazla bilgi için bkz. temel bilgiler: içerik kökü.

Ortam

Uygulamanın ortamınıayarlar.

Anahtar: environment
Şunu yazın: string
Varsayılan: Production
Şunu kullanarak ayarla:UseEnvironment
Ortam değişkeni: <PREFIX_>ENVIRONMENT ( <PREFIX_> isteğe bağlı ve Kullanıcı tanımlı)

Ortam herhangi bir değere ayarlanabilir. Çerçeve tanımlı değerler,, Development Staging ve içerir Production . Değerler büyük/küçük harfe duyarlı değildir.

var host = new HostBuilder()
    .UseEnvironment(EnvironmentName.Development)

ConfigureHostConfiguration

ConfigureHostConfigurationIConfigurationBuilderkonak için oluşturmak üzere bir kullanır IConfiguration . Konak yapılandırması, IHostingEnvironment uygulamanın derleme sürecinde kullanılmak üzere başlatmak için kullanılır.

ConfigureHostConfiguration , eklenebilir sonuçlarla birden çok kez çağrılabilir. Ana bilgisayar, belirli bir anahtardaki bir değeri en son belirleyen seçeneği kullanır.

Varsayılan olarak hiçbir sağlayıcı dahil değildir. Uygulamanın gerektirdiği her türlü yapılandırma sağlayıcısını açık bir şekilde belirtmeniz gerekir ConfigureHostConfiguration , örneğin:

  • Dosya yapılandırması (örneğin, dosyadaki bir hostsettings.js ).
  • Ortam değişkeni yapılandırması.
  • Komut satırı bağımsız değişken yapılandırması.
  • Diğer tüm gerekli yapılandırma sağlayıcıları.

Konağın dosya yapılandırması, uygulamanın temel yolu ve SetBasePath ardından dosya yapılandırma sağlayıcılarındanbirine yapılan bir çağrı tarafından belirtilerek etkinleştirilir. Örnek uygulama, üzerinde bir JSON hostsettings.jskullanır ve dosyanın konak yapılandırma AddJsonFile ayarlarını tüketmek için çağrıları kullanır.

Konak için ortam değişkeni yapılandırması eklemek için konak AddEnvironmentVariables oluşturucuda çağrısı kullanın. AddEnvironmentVariables isteğe bağlı kullanıcı tanımlı ön eki kabul eder. Örnek uygulama, ön eki PREFIX_ kullanır. Ortam değişkenleri okunurken ön ek kaldırılır. Örnek uygulamanın ana bilgisayarı yapılandırıldığında, için ortam değişkeni değeri PREFIX_ENVIRONMENT anahtarın konak yapılandırma değeri environment olur.

Uygulama kullanırken veya Visual Studio kullanırken, ortam değişkenleri Dosyanın dotnet run Özellikler/launchSettings.jsolarak ayarlanmış olabilir. Bu Visual Studio Code,geliştirme sırasında dosyada .vscode/launch.jsortam değişkenleri ayarlanmış olabilir. Daha fazla bilgi için bkz. ASP.NET Core'da birden çok ortam kullanma.

Komut satırı yapılandırması çağrılarak AddCommandLine eklenir. Komut satırı yapılandırması, komut satırı bağımsız değişkenlerini önceki yapılandırma sağlayıcıları tarafından sağlanan yapılandırmayı geçersiz kılmak için son olarak eklenir.

hostsettings.js:

{
  "environment": "Development"
}

applicationName ve contentRoot anahtarları ile ek yapılandırma sağlanmalıdır.

kullanan HostBuilder örnek ConfigureHostConfiguration yapılandırma:

var host = new HostBuilder()
    .ConfigureHostConfiguration(configHost =>
    {
        configHost.SetBasePath(Directory.GetCurrentDirectory());
        configHost.AddJsonFile("hostsettings.json", optional: true);
        configHost.AddEnvironmentVariables(prefix: "PREFIX_");
        configHost.AddCommandLine(args);
    })

ConfigureAppConfiguration

Uygulama yapılandırması, uygulama üzerinde ConfigureAppConfiguration çağrılarak IHostBuilder oluşturulur. ConfigureAppConfiguration , uygulama IConfigurationBuilder için bir oluşturmak için IConfiguration kullanır. ConfigureAppConfiguration eklenebilir sonuçlarla birden çok kez çağrıl olabilir. Uygulama, belirli bir anahtarda en son değer ayaran seçeneği kullanır. tarafından oluşturulan ConfigureAppConfiguration yapılandırma, sonraki işlemler içinHostBuilderContext.Configve içinde Services kullanılabilir.

Uygulama yapılandırması, ConfigureHostConfigurationtarafından sağlanan konak yapılandırmasını otomatik olarak alır.

kullanan örnek uygulama ConfigureAppConfiguration yapılandırması:

var host = new HostBuilder()
    .ConfigureAppConfiguration((hostContext, configApp) =>
    {
        configApp.SetBasePath(Directory.GetCurrentDirectory());
        configApp.AddJsonFile("appsettings.json", optional: true);
        configApp.AddJsonFile(
            $"appsettings.{hostContext.HostingEnvironment.EnvironmentName}.json", 
            optional: true);
        configApp.AddEnvironmentVariables(prefix: "PREFIX_");
        configApp.AddCommandLine(args);
    })

appsettings.json:

{
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "AllowedHosts": "*"
}

appsettings.Development.js:

{
  "Logging": {
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    }
  }
}

appsettings.Production.js:

{
  "Logging": {
    "LogLevel": {
      "Default": "Error",
      "System": "Information",
      "Microsoft": "Information"
    }
  }
}

Ayarlar dosyalarını çıkış dizinine taşımak için, proje dosyasındaki proje MSBuild ayarları olarak belirtin. Örnek uygulama, JSON uygulama ayarları dosyalarını taşır hostsettings.jsaşağıdaki öğeyle birlikte <Content> devam eder:

<ItemGroup>
  <Content Include="**\*.json" Exclude="bin\**\*;obj\**\*" 
      CopyToOutputDirectory="PreserveNewest" />
</ItemGroup>

Not

ve gibi yapılandırma uzantısı yöntemleri, ağ NuGet veMicrosoft.Extensions.Configuration.Jsgibi ekMicrosoft.Extensions.ConfigAddJsonFile AddEnvironmentVariables gerektirir. EnvironmentVariables. Uygulama meta veri Microsoft.AspNetCore.Appkullanmadıkça, bu paketlerin çekirdek paket paketine ek olarak projeyeMicrosoft.Extensions.Configgerekir. Daha fazla bilgi için bkz. ASP.NET Core'de yapılandırma.

ConfigureServices

ConfigureServices uygulamanın bağımlılık ekleme kapsayıcısı için hizmetler ekler. ConfigureServices eklenebilir sonuçlarla birden çok kez çağrıl olabilir.

Barındırılan hizmet, arabirimi uygulayan arka plan görev mantığına sahip bir IHostedService sınıftır. Daha fazla bilgi için bkz. ASP.NET Core içinde barındırılan hizmetlerle arka plan görevleri.

Örnek uygulama, uygulamaya yaşam süresi olayları için bir hizmet ve zamanlı bir arka plan görevi eklemek için uzantı AddHostedService LifetimeEventsHostedService yöntemini TimedHostedService kullanır:

var host = new HostBuilder()
    .ConfigureServices((hostContext, services) =>
    {
        if (hostContext.HostingEnvironment.IsDevelopment())
        {
            // Development service configuration
        }
        else
        {
            // Non-development service configuration
        }

        services.AddHostedService<LifetimeEventsHostedService>();
        services.AddHostedService<TimedHostedService>();
    })

ConfigureLogging

ConfigureLogging , sağlanan 'i yapılandırmak için bir temsilci ILoggingBuilder ekler. ConfigureLogging , eklenebilir sonuçlarla birden çok kez çağrıl olabilir.

var host = new HostBuilder()
    .ConfigureLogging((hostContext, configLogging) =>
    {
        configLogging.AddConsole();
        configLogging.AddDebug();
    })

UseConsoleLifetime

UseConsoleLifetimeCtrl + C/SIGINT veya SIGTERM'i dinler ve kapatma StopApplication işlemini başlatmak için çağrıları. UseConsoleLifetimeRunAsync ve WaitForShutdownAsync gibi uzantıların engelini kaldırır. Microsoft.Extensions.Hosting.Internal.ConsoleLifetime varsayılan yaşam süresi uygulaması olarak önceden kaydedilmiştir. Kaydedilen son yaşam süresi kullanılır.

var host = new HostBuilder()
    .UseConsoleLifetime()

Kapsayıcı yapılandırması

Diğer kapsayıcılara takmayı desteklemek için konak kabul IServiceProviderFactory<TContainerBuilder> eder. Fabrika sağlama, DI kapsayıcı kaydının bir parçası değil, somut DI kapsayıcısını oluşturmak için kullanılan bir konak iç bilgidir. UseServiceProviderFactory(IServiceProviderFactory < TContainerBuilder > ) uygulamanın hizmet sağlayıcısını oluşturmak için kullanılan varsayılan fabrikayı geçersiz kılar.

Özel kapsayıcı yapılandırması yöntemi tarafından ConfigureContainer yönetilir. ConfigureContainer , kapsayıcıyı temel alınan konak API'sinde yapılandırmak için kesin türü kesin olarak belirli bir deneyim sağlar. ConfigureContainer eklenebilir sonuçlarla birden çok kez çağrıl olabilir.

Uygulama için bir hizmet kapsayıcısı oluşturun:

namespace GenericHostSample
{
    internal class ServiceContainer
    {
    }
}

Hizmet kapsayıcı fabrikası sağlama:

using System;
using Microsoft.Extensions.DependencyInjection;

namespace GenericHostSample
{
    internal class ServiceContainerFactory : 
        IServiceProviderFactory<ServiceContainer>
    {
        public ServiceContainer CreateBuilder(
            IServiceCollection services)
        {
            return new ServiceContainer();
        }

        public IServiceProvider CreateServiceProvider(
            ServiceContainer containerBuilder)
        {
            throw new NotImplementedException();
        }
    }
}

Fabrikayı kullanın ve uygulama için özel hizmet kapsayıcısını yapılandırma:

var host = new HostBuilder()
    .UseServiceProviderFactory<ServiceContainer>(new ServiceContainerFactory())
    .ConfigureContainer<ServiceContainer>((hostContext, container) =>
    {
    })

Genişletilebilirlik

Konak genişletilebilirliği üzerinde uzantı yöntemleriyle IHostBuilder gerçekleştirilir. Aşağıdaki örnek, bir uzantı yönteminin uygulamasındaki IHostBuilder TimedHostedService örneğiyle bir uygulamanın nasıl genişletici olduğunu ASP.NET Core içinde barındırılan hizmetlerle arka plan görevleri gösterir.

var host = new HostBuilder()
    .UseHostedService<TimedHostedService>()
    .Build();

await host.StartAsync();

Bir uygulama, geçirilen UseHostedService barındırılan hizmeti kaydetmek için uzantı yöntemini T kullanır:

using System;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

public static class Extensions
{
    public static IHostBuilder UseHostedService<T>(this IHostBuilder hostBuilder)
        where T : class, IHostedService, IDisposable
    {
        return hostBuilder.ConfigureServices(services =>
            services.AddHostedService<T>());
    }
}

Ana bilgisayarı yönetme

Uygulama, IHost hizmet kapsayıcısı içinde IHostedService kayıtlı olan uygulamaları başlatma ve durdurmadan sorumludur.

Çalıştır

Run uygulamayı çalıştırır ve ana bilgisayar kapatana kadar çağıran iş parçacığını engeller:

public class Program
{
    public void Main(string[] args)
    {
        var host = new HostBuilder()
            .Build();

        host.Run();
    }
}

RunAsync

RunAsync uygulamayı çalıştırır ve iptal Task belirteci veya kapatma tetiklendiğinde tamamlayan bir döndürür:

public class Program
{
    public static async Task Main(string[] args)
    {
        var host = new HostBuilder()
            .Build();

        await host.RunAsync();
    }
}

RunConsoleAsync

RunConsoleAsynckonsol desteğini sağlar, ana bilgisayarı derlemeye ve başlatır ve Ctrl + C/SIGINT veya SIGTERM'in kapanmasını bekler.

public class Program
{
    public static async Task Main(string[] args)
    {
        var hostBuilder = new HostBuilder();

        await hostBuilder.RunConsoleAsync();
    }
}

Başlat ve DurdurAsync

Start , ana bilgisayarı zaman uyumlu olarak başlatır.

StopAsync , sağlanan zaman aşımı içinde ana bilgisayarı durdurmaya çalışır.

public class Program
{
    public static async Task Main(string[] args)
    {
        var host = new HostBuilder()
            .Build();

        using (host)
        {
            host.Start();

            await host.StopAsync(TimeSpan.FromSeconds(5));
        }
    }
}

StartAsync ve StopAsync

StartAsync uygulamayı başlatır.

StopAsync uygulamayı durdurur.

public class Program
{
    public static async Task Main(string[] args)
    {
        var host = new HostBuilder()
            .Build();

        using (host)
        {
            await host.StartAsync();

            await host.StopAsync();
        }
    }
}

WaitForShutdown

WaitForShutdown, gibi aracılığıyla IHostLifetime tetiklenir Microsoft.Extensions.Hosting.Internal.ConsoleLifetime (Ctrl + C/SIGINT veya SIGTERM için dinler). WaitForShutdown çağrısında StopAsync bulundu.

public class Program
{
    public void Main(string[] args)
    {
        var host = new HostBuilder()
            .Build();

        using (host)
        {
            host.Start();

            host.WaitForShutdown();
        }
    }
}

WaitForShutdownAsync

WaitForShutdownAsync , belirtilen Task belirteç aracılığıyla kapatma tetiklendiğinde ve çağrısında tamamlandığında tamamlayan bir StopAsync döndürür.

public class Program
{
    public static async Task Main(string[] args)
    {
        var host = new HostBuilder()
            .Build();

        using (host)
        {
            await host.StartAsync();

            await host.WaitForShutdownAsync();
        }

    }
}

Dış denetim

Ana bilgisayar dış denetimi dışarıdan çağrılan yöntemler kullanılarak elde edilebilir:

public class Program
{
    private IHost _host;

    public Program()
    {
        _host = new HostBuilder()
            .Build();
    }

    public async Task StartAsync()
    {
        _host.StartAsync();
    }

    public async Task StopAsync()
    {
        using (_host)
        {
            await _host.StopAsync(TimeSpan.FromSeconds(5));
        }
    }
}

WaitForStartAsync , devam etmeden önce StartAsync tamamlandıktan sonra tamamlanacak şekilde başında çağrılır. Bu, bir dış olay tarafından sinyal verilene kadar başlatmayı geciktirmek için kullanılabilir.

IHostingEnvironment arabirimi

IHostingEnvironment uygulamanın barındırma ortamı hakkında bilgi sağlar. Özelliklerini ve uzantı yöntemlerini IHostingEnvironment kullanmak için oluşturucu ekleme kullanarak alın:

public class MyClass
{
    private readonly IHostingEnvironment _env;

    public MyClass(IHostingEnvironment env)
    {
        _env = env;
    }

    public void DoSomething()
    {
        var environmentName = _env.EnvironmentName;
    }
}

Daha fazla bilgi için bkz. ASP.NET Core'da birden çok ortam kullanma.

IApplicationLifetime arabirimi

IApplicationLifetime , yetkisiz kapatma istekleri de dahil olmak üzere başlatma sonrası ve kapatma etkinliklerine izin verir. Arabirimde üç özellik, başlatma ve kapatma olaylarını Action tanımlayan yöntemleri kaydetmek için kullanılan iptal belirteçleridir.

İptal Belirteci Tetiklendiğinde…
ApplicationStarted Konak tamamen başlatıldı.
ApplicationStopped Konak, yetkisiz kapatmayı tamamlar. Tüm istekler işlenmeli. Bu olay tamamlandıktan sonra kapatma blokları.
ApplicationStopping Konak, yetkisiz kapatma işlemi gerçekleştirerek. İstekler hala işlmektedir. Bu olay tamamlandıktan sonra kapatma blokları.

Oluşturucu-hizmeti herhangi IApplicationLifetime bir sınıfa ekleme. Örnek uygulama, olayları kaydetmek için bir LifetimeEventsHostedService sınıfa IHostedService (uygulama) oluşturucu ekleme kullanır.

LifetimeEventsHostedService.cs:

internal class LifetimeEventsHostedService : IHostedService
{
    private readonly ILogger _logger;
    private readonly IApplicationLifetime _appLifetime;

    public LifetimeEventsHostedService(
        ILogger<LifetimeEventsHostedService> logger, 
        IApplicationLifetime appLifetime)
    {
        _logger = logger;
        _appLifetime = appLifetime;
    }

    public Task StartAsync(CancellationToken cancellationToken)
    {
        _appLifetime.ApplicationStarted.Register(OnStarted);
        _appLifetime.ApplicationStopping.Register(OnStopping);
        _appLifetime.ApplicationStopped.Register(OnStopped);

        return Task.CompletedTask;
    }

    public Task StopAsync(CancellationToken cancellationToken)
    {
        return Task.CompletedTask;
    }

    private void OnStarted()
    {
        _logger.LogInformation("OnStarted has been called.");

        // Perform post-startup activities here
    }

    private void OnStopping()
    {
        _logger.LogInformation("OnStopping has been called.");

        // Perform on-stopping activities here
    }

    private void OnStopped()
    {
        _logger.LogInformation("OnStopped has been called.");

        // Perform post-stopped activities here
    }
}

StopApplication , uygulamanın sonlandırılmasını talep ediyor. Aşağıdaki sınıf, StopApplication sınıfın yöntemi çağrıldığında bir uygulamayı düzgün bir şekilde kapatmak için kullanır Shutdown :

public class MyClass
{
    private readonly IApplicationLifetime _appLifetime;

    public MyClass(IApplicationLifetime appLifetime)
    {
        _appLifetime = appLifetime;
    }

    public void Shutdown()
    {
        _appLifetime.StopApplication();
    }
}

Ek kaynaklar