Öğretici: .NET arka plan hizmetinde dinamik yapılandırma kullanma

Uygulama Yapılandırması verileri bir .NET uygulamasında Uygulama Ayarlar olarak yüklenebilir. Daha fazla bilgi için bkz . hızlı başlangıç. Ancak, .NET tarafından tasarlandığı gibi, Uygulama Ayarlar yalnızca uygulama yeniden başlatıldığında yenilenebilir. .NET sağlayıcısı Uygulama Yapılandırması bir .NET Standart kitaplığıdır. Uygulama yeniden başlatma olmadan yapılandırmayı dinamik olarak önbelleğe almayı ve yenilemeyi destekler. Bu öğretici, bir .NET arka plan hizmetinde dinamik yapılandırma güncelleştirmelerini nasıl uygulayabileceğinizi gösterir.

Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:

  • .NET arka plan hizmetinizi, bir Uygulama Yapılandırması deposundaki değişikliklere yanıt olarak yapılandırmasını güncelleştirecek şekilde ayarlayın.
  • Arka plan hizmetinizde en son yapılandırmayı kullanın.

Önkoşullar

  • Etkin aboneliği olan bir Azure hesabı. Ücretsiz bir tane oluşturun.
  • bir Uygulama Yapılandırması mağazası. Mağaza oluşturma.
  • .NET SDK 6.0 veya üzeri - Azure Cloud Shell'de de kullanılabilir.

Anahtar-değer ekleme

Uygulama Yapılandırması deposuna aşağıdaki anahtar değerini ekleyin ve Etiket ve İçerik Türü değerlerini varsayılan değerleriyle bırakın. Azure portalını veya CLI'yı kullanarak bir depoya anahtar-değer ekleme hakkında daha fazla bilgi için Anahtar-değer oluşturma bölümüne gidin.

Anahtar Değer
TestApp:Ayarlar:Message Azure Uygulaması Yapılandırmasından Veriler

.NET arka plan hizmeti oluşturma

Yeni bir .NET uygulama projesi oluşturmak için .NET komut satırı arabirimini (CLI) kullanırsınız. .NET CLI'yi Visual Studio yerine kullanmanın avantajı, Windows, macOS ve Linux platformları genelinde kullanılabilir olmasıdır. Alternatif olarak, Azure Cloud Shell'de bulunan önceden yüklenmiş araçları da kullanabilirsiniz.

  1. Projeniz için yeni bir klasör oluşturun.

  2. Yeni klasörde aşağıdaki komutu çalıştırarak yeni bir .NET arka plan hizmeti projesi oluşturun:

    dotnet new worker
    

Uygulama Yapılandırması'dan verileri yeniden yükleme

  1. Aşağıdaki komutu çalıştırarak NuGet paketine başvurular Microsoft.Extensions.Configuration.AzureAppConfiguration ekleyin:

    dotnet add package Microsoft.Extensions.Configuration.AzureAppConfiguration
    
  2. Projenizin paketlerini geri yüklemek için aşağıdaki komutu çalıştırın:

    dotnet restore
    
  3. Program.cs açın ve aşağıdaki deyimleri ekleyin:

    using Microsoft.Extensions.Configuration;
    using Microsoft.Extensions.Configuration.AzureAppConfiguration;
    
  4. Uygulama Yapılandırması'a Bağlan.

    // Existing code in Program.cs
    // ... ...
    
    var builder = Host.CreateApplicationBuilder(args);
    
    builder.Configuration.AddAzureAppConfiguration(options =>
    {
        options.Connect(Environment.GetEnvironmentVariable("ConnectionString"))
            // Load all keys that start with `TestApp:`.
            .Select("TestApp:*")
            // Configure to reload the key 'TestApp:Settings:Message' if it is modified.
            .ConfigureRefresh(refreshOptions =>
            {
                refreshOptions.Register("TestApp:Settings:Message");
            });
    
        // Register the refresher so that the Worker service can consume it through DI
        builder.Services.AddSingleton(options.GetRefresher());
    });
    
    // The rest of existing code in Program.cs
    // ... ...
    

    yöntemindeConfigureRefresh, değişiklik izleme için Uygulama Yapılandırması deponuzdaki bir anahtar kaydedilir. yöntemi, Register kayıtlı anahtar değişirse tüm yapılandırma değerlerinin yenilenip yenilenmeyeceğini belirtmek için kullanılabilecek isteğe bağlı bir boole parametresine refreshAll sahiptir. Bu örnekte yalnızca TestApp:Ayarlar:Message anahtarı yenilenir. Yenileme için kaydedilen tüm ayarların, yeni yenileme denenmeden önce varsayılan önbellek süre sonu 30 saniyedir. yöntemi çağrılarak AzureAppConfigurationRefreshOptions.SetCacheExpiration güncelleştirilebilir.

  5. Worker.cs'i açın. hizmete ve IConfigurationRefresher Worker ekleme IConfiguration ve yapılandırma verilerini Uygulama Yapılandırması günlüğe kaydetme.

    public class Worker : BackgroundService
    {
        private readonly ILogger<Worker> _logger;
        private readonly IConfiguration _configuration;
        private readonly IConfigurationRefresher _refresher;
    
        public Worker(ILogger<Worker> logger, IConfiguration configuration, IConfigurationRefresher refresher)
        {
            _logger = logger ?? throw new ArgumentNullException(nameof(logger));
            _configuration = configuration ?? throw new ArgumentNullException(nameof(configuration));
            _refresher = refresher ?? throw new ArgumentNullException(nameof(refresher));
        }
    
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            while (!stoppingToken.IsCancellationRequested)
            {
                // Intentionally not await TryRefreshAsync to avoid blocking the execution.
                _refresher.TryRefreshAsync(stoppingToken);
    
                if (_logger.IsEnabled(LogLevel.Information))
                {
                    _logger.LogInformation(_configuration["TestApp:Settings:Message"] ?? "No data.");
                }
    
                await Task.Delay(TimeSpan.FromSeconds(30), stoppingToken);
            }
        }
    }
    

    Yöntemin tek başına çağrılması ConfigureRefresh , yapılandırmanın otomatik olarak yenilenmesine neden olmaz. Yenilemeyi TryRefreshAsync tetiklemek için arabiriminden IConfigurationRefresher yöntemini çağırırsınız. Bu tasarım, uygulamanız boşta olsa bile Uygulama Yapılandırması gönderilen istekleri önlemeye yöneliktir. Çağrıyı TryRefreshAsync uygulamanızın etkin olduğunu düşündüğünüz yere ekleyebilirsiniz. Örneğin, gelen bir iletiyi, bir sırayı veya karmaşık bir görevin yinelemesini işlerken olabilir. Uygulamanız sürekli etkinse zamanlayıcıda da olabilir. Bu örnekte, arka plan hizmeti her yürütülürken çağrısı TryRefreshAsync yapılır. Herhangi bir nedenle çağrı TryRefreshAsync başarısız olsa bile uygulamanızın önbelleğe alınmış yapılandırmayı kullanmaya devam edeceğine dikkat edin. Yapılandırılan önbellek süre sonu süresi geçtiğinde ve TryRefreshAsync çağrı uygulama etkinliğiniz tarafından yeniden tetiklendiğinde başka bir deneme yapılır. Çağrı TryRefreshAsync , yapılandırılan önbellek süre sonu süresi dolmadan önce yapılan bir işlev değildir, bu nedenle sık sık çağrılsa bile performans etkisi en düşük düzeyde olur.

Uygulamayı yerel olarak derleme ve çalıştırma

  1. Bağlan ionString adlı bir ortam değişkeni ayarlayın ve bunu Uygulama Yapılandırması deponuzun erişim anahtarına ayarlayın. Komut satırında aşağıdaki komutu çalıştırın.

    Windows komut istemini kullanarak uygulamayı yerel olarak derlemek ve çalıştırmak için aşağıdaki komutu çalıştırın.

    setx ConnectionString "connection-string-of-your-app-configuration-store"
    

    Değişikliğin etkili olması için komut istemini yeniden başlatın. Ortam değişkeninin değerini yazdırarak doğru ayarlandığını doğrulayın.

  2. Uygulamayı derlemek için aşağıdaki komutu çalıştırın.

    dotnet build
    
  3. Derleme başarıyla tamamlandıktan sonra aşağıdaki komutu çalıştırarak uygulamayı yerel olarak çalıştırın.

    dotnet run
    
  4. Konsolda aşağıdaki çıkışları görmeniz gerekir.

    Arka plan hizmetinin ekran görüntüsü.

  5. Azure portalında, Uygulama Yapılandırması deponuzun Yapılandırma gezginine gidin ve aşağıdaki anahtarın değerini güncelleştirin.

    Anahtar Değer
    TestApp:Ayarlar:Message Azure Uygulaması Yapılandırmasından Veriler - Güncelleştirildi
  6. Yenileme aralığı zaman penceresinin geçmesi için birkaç dakika bekleyin. Konsol çıkışlarının değiştiğini göreceksiniz.

    Yenilenen arka plan hizmetinin ekran görüntüsü.

Kaynakları temizleme

Bu makalede oluşturulan kaynakları kullanmaya devam etmek istemiyorsanız ücretlerden kaçınmak için burada oluşturduğunuz kaynak grubunu silin.

Önemli

Silinen kaynak grupları geri alınamaz. Kaynak grubu ve içindeki tüm kaynaklar kalıcı olarak silinir. Yanlış kaynak grubunu veya kaynakları yanlışlıkla silmediğinizden emin olun. Bu makalenin kaynaklarını, saklamak istediğiniz diğer kaynakları içeren bir kaynak grubu içinde oluşturduysanız, kaynak grubunu silmek yerine her kaynağı ilgili bölmeden tek tek silin.

  1. Azure portalında oturum açın ve Kaynak grupları'nı seçin.
  2. Ada göre filtrele kutusuna kaynak grubunuzun adını girin.
  3. Genel bir bakış görmek için sonuç listesinde kaynak grubu adını seçin.
  4. Kaynak grubunu sil'i seçin.
  5. Kaynak grubunun silinmesini onaylamanız istenir. Onaylamak için kaynak grubunuzun adını girin ve Sil'i seçin.

Birkaç dakika sonra kaynak grubu ve tüm kaynakları silinir.

Sonraki adımlar

Bu öğreticide yapılandırma ayarlarını Uygulama Yapılandırması dinamik olarak yenilemek için .NET arka plan hizmetinizi etkinleştirmişsiniz. ASP.NET Web Uygulamasında dinamik yapılandırmayı etkinleştirmeyi öğrenmek için sonraki öğreticiye geçin:

Azure yönetilen kimliğini kullanarak Uygulama Yapılandırması erişimini kolaylaştırmayı öğrenmek için sonraki öğreticiye geçin: