Visual Studio ile Azure İşlevleri geliştirme

Visual Studio, C# sınıf kitaplığı işlevlerini Azure'a geliştirmenizi, test etmenizi ve dağıtmanızı sağlar. Bu deneyim Azure İşlevleri ilk deneyiminizse bkz. Azure İşlevleri giriş.

Hemen başlamak için Visual Studio için İşlevler hızlı başlangıcını tamamlayın.

Bu makalede, C# sınıf kitaplığı işlevleri geliştirmek ve bunları Azure'da yayımlamak için Visual Studio'yu kullanma hakkında ayrıntılar sağlanır. C# sınıf kitaplığı işlevlerini geliştirmeye yönelik iki model vardır: Yalıtılmış çalışan modeli ve İşlem içi model.

Bu makalede yalıtılmış çalışan modeli sürümünü okuyorsunuz. Makalenin üst kısmında tercih ettiğiniz modeli seçebilirsiniz.

Bu makalenin işlem içi model sürümünü okuyorsunuz. Makalenin üst kısmında tercih ettiğiniz modeli seçebilirsiniz.

Aksi belirtilmediği sürece, gösterilen yordamlar ve örnekler Visual Studio 2022 içindir. Visual Studio 2022 sürümleri hakkında daha fazla bilgi için sürüm notlarına veya önizleme sürüm notlarına bakın.

Önkoşullar

  • Azure geliştirme iş yükü de dahil olmak üzere Visual Studio 2022.

  • Azure Depolama hesabı gibi ihtiyacınız olan diğer kaynaklar yayımlama işlemi sırasında aboneliğinizde oluşturulur.

  • Azure aboneliğiniz yoksa başlamadan önce birücretsiz Azure hesabı oluşturun.

Azure İşlevleri projesi oluşturma

Visual Studio'daki Azure İşlevleri proje şablonu, Azure'daki bir işlev uygulamasına yayımlayabileceğiniz bir C# sınıf kitaplığı projesi oluşturur. İşlevleri daha kolay yönetim, dağıtım, ölçeklendirme ve kaynakların paylaşımı için mantıksal birim olarak gruplandırmak için işlev uygulamasını kullanabilirsiniz.

  1. Visual Studio menüsünden Dosya>Yeni Proje'yi> seçin.

  2. Yeni proje oluştur'da, arama kutusuna işlevler yazın, Azure İşlevleri şablonunu seçin ve ardından İleri'yi seçin.

  3. Yeni projenizi yapılandırın bölümünde projeniz için bir Proje adı girin ve Oluştur'u seçin. İşlev uygulamasının adı, bir C# ad alanı olarak geçerli olmalıdır; bu nedenle alt çizgi, kısa çizgi veya alfasayısal olmayan herhangi bir karakter kullanmayın.

  4. Yeni Azure İşlevleri uygulama oluştur ayarları için aşağıdaki tabloda yer alan değerleri kullanın:

    Ayar Value Açıklama
    .NET sürümü .NET 6 Yalıtılmış Bu değer, yalıtılmış bir çalışan işleminde çalışan bir işlev projesi oluşturur. Yalıtılmış çalışan işlemi, .NET'in ve ayrıca .NET Framework'ün LTS olmayan diğer sürümünü destekler. Daha fazla bilgi için bkz. Azure İşlevleri çalışma zamanı sürümlerine genel bakış.
    İşlev şablonu HTTP tetikleyicisi Bu değer, HTTP isteği tarafından tetiklenen bir işlev oluşturur.
    Depolama hesabı (AzureWebJobs Depolama) Depolama öykünücüsü Azure'daki bir işlev uygulaması için depolama hesabı gerektiğinden, projenizi Azure'da yayımladığınızda bir uygulama atanır veya oluşturulur. HTTP tetikleyicisi bağlantı dizesi Azure Depolama hesabı kullanmaz; diğer tüm tetikleyici türleri geçerli bir Azure Depolama hesabı bağlantı dizesi gerektirir.
    Yetkilendirme düzeyi Anonim Oluşturulan işlev, anahtar gerektirmeden herhangi bir istemci tarafından tetiklenebilir. Bu yetkilendirme ayarı yeni işlevinizi test etmenizi kolaylaştırır. Anahtarlar ve yetkilendirme hakkında daha fazla bilgi için bkz . Yetkilendirme anahtarları ve HTTP ve web kancası bağlamaları.

    Screenshot of Azure Functions project settings

    Ayar Value Açıklama
    .NET sürümü .NET 6 Bu değer, Azure İşlevleri çalışma zamanının 4.x sürümüyle işlem içinde çalışan bir işlev projesi oluşturur. Daha fazla bilgi için bkz. Azure İşlevleri çalışma zamanı sürümlerine genel bakış.
    İşlev şablonu HTTP tetikleyicisi Bu değer, HTTP isteği tarafından tetiklenen bir işlev oluşturur.
    Depolama hesabı (AzureWebJobs Depolama) Depolama öykünücüsü Azure'daki bir işlev uygulaması için depolama hesabı gerektiğinden, projenizi Azure'da yayımladığınızda bir uygulama atanır veya oluşturulur. HTTP tetikleyicisi bağlantı dizesi Azure Depolama hesabı kullanmaz; diğer tüm tetikleyici türleri geçerli bir Azure Depolama hesabı bağlantı dizesi gerektirir.
    Yetkilendirme düzeyi Anonim Oluşturulan işlev, anahtar gerektirmeden herhangi bir istemci tarafından tetiklenebilir. Bu yetkilendirme ayarı yeni işlevinizi test etmenizi kolaylaştırır. Anahtarlar ve yetkilendirme hakkında daha fazla bilgi için bkz . Yetkilendirme anahtarları ve HTTP ve web kancası bağlamaları.

    Screenshot of Azure Functions project settings

    Yetkilendirme düzeyini Anonim olarak ayarladığınızdan emin olun. varsayılan İşlev düzeyini seçerseniz işlev uç noktanıza erişme isteklerinde işlev anahtarını sunmanız gerekir.

  5. İşlev projesini ve HTTP tetikleyici işlevini oluşturmak için Oluştur'u seçin.

Bir Azure İşlevleri projesi oluşturduktan sonra proje şablonu bir C# projesi oluşturur, ve Microsoft.Azure.Functions.Worker.Sdk NuGet paketlerini yükler Microsoft.Azure.Functions.Worker ve hedef çerçeveyi ayarlar.

Bir Azure İşlevleri projesi oluşturduktan sonra proje şablonu bir C# projesi oluşturur, NuGet paketini yükler Microsoft.NET.Sdk.Functions ve hedef çerçeveyi ayarlar.

Yeni proje aşağıdaki dosyalara sahiptir:

  • host.json: İşlevler ana bilgisayarını yapılandırmanıza olanak tanır. Bu ayarlar hem yerel olarak hem de Azure'da çalışırken uygulanır. Daha fazla bilgi için bkz . host.json başvurusu.

  • local.settings.json: İşlevleri yerel olarak çalıştırırken kullanılan ayarları korur. Bu ayarlar Azure'da çalışırken kullanılmaz. Daha fazla bilgi için bkz . Yerel ayarlar dosyası.

    Önemli

    local.settings.json dosyası gizli diziler içerebileceğinden, dosyayı proje kaynak denetiminizin dışında tutmanız gerekir. Bu dosyanın Çıkış Dizinine Kopyala ayarının daha yeniyse Kopyala olarak ayarlandığından emin olun.

Daha fazla bilgi için Yalıtılmış çalışan kılavuzundaki Proje yapısı bölümüne bakın.

Daha fazla bilgi için bkz . İşlevler sınıf kitaplığı projesi.

Uygulama ayarlarıyla yerel olarak çalışma

Azure'da bir işlev uygulamasında çalışırken, işlevlerinizin gerektirdiği ayarlar uygulama ayarlarında güvenli bir şekilde depolanır. Yerel geliştirme sırasında, bu ayarlar bunun yerine local.settings.json dosyasındaki koleksiyona Values eklenir. local.settings.json dosyası, yerel geliştirme araçları tarafından kullanılan ayarları da depolar.

Projenizin local.settings.json dosyasındaki koleksiyondaki Values öğeler, işlev uygulamanızın Azure'daki uygulama ayarlarındaki öğeleri yansıtmaya yöneliktir.

Visual Studio, projeyi yayımladığınızda local.settings.json ayarları otomatik olarak karşıya yüklemez. Bu ayarların Azure'daki işlev uygulamanızda da mevcut olduğundan emin olmak için projenizi yayımladıktan sonra bunları karşıya yükleyin. Daha fazla bilgi için bkz . İşlev uygulaması ayarları. Koleksiyondaki ConnectionStrings değerler hiçbir zaman yayımlanmaz.

Kodunuz, işlev uygulaması ayarları değerlerini ortam değişkenleri olarak da okuyabilir. Daha fazla bilgi için bkz . Ortam değişkenleri.

Projeyi yerel geliştirme için yapılandırma

İşlevler çalışma zamanı dahili olarak bir Azure Depolama hesabı kullanır. HTTP ve web kancaları dışındaki tüm tetikleyici türleri için anahtarı geçerli bir Azure Depolama hesabı bağlantı dizesi olarak ayarlayınValues.AzureWebJobsStorage. İşlev uygulamanız, projenin gerektirdiği bağlantı ayarı için Azurite öykünücüsünüzüAzureWebJobsStorage de kullanabilir. Öykünücüyü kullanmak için değerini AzureWebJobsStorage olarak UseDevelopmentStorage=trueayarlayın. Bu ayarı dağıtımdan önce bağlantı dizesi gerçek bir depolama hesabı olarak değiştirin. Daha fazla bilgi için bkz . Yerel depolama öykünücüsü.

Depolama hesabı bağlantı dizesi ayarlamak için:

  1. Azure portalda depolama hesabınıza gidin.

  2. Erişim anahtarları sekmesinde, Güvenlik + ağ'ın altında, key1'in Bağlan ion dizesini kopyalayın.

  3. Projenizde local.settings.json dosyasını açın ve anahtarın AzureWebJobsStorage değerini kopyaladığınız bağlantı dizesi ayarlayın.

  4. İşlevleriniz için gereken diğer bağlantılar için diziye Values benzersiz anahtarlar eklemek için önceki adımı yineleyin.

Projenize işlev ekleme

C# sınıf kitaplığı işlevlerinde, işlev tarafından kullanılan bağlamalar koda öznitelikler uygulanarak tanımlanır. İşlev tetikleyicilerinizi sağlanan şablonlardan oluşturduğunuzda tetikleyici öznitelikleri sizin için uygulanır.

  1. Çözüm Gezgini'da proje düğümünüzü sağ tıklatın ve Yeni Azure İşlevi Ekle'yi>seçin.

  2. Sınıf için bir Ad girin ve Ekle'yi seçin.

  3. Tetikleyicinizi seçin, gerekli bağlama özelliklerini ayarlayın ve ekle'yi seçin. Aşağıdaki örnekte Kuyruk depolama tetikleyicisi işlevi oluşturma ayarları gösterilmektedir.

    Create a Queue storage trigger function

    Azure Depolama hizmet tetikleyicisi için Bağlantıyı yapılandır kutusunu işaretleyin; Azurite depolama öykünücüsü kullanma veya sağlanan azure depolama hesabına başvurma arasında seçim yapmanız istenir. İleri'yi seçin ve bir depolama hesabı seçerseniz Visual Studio, Azure hesabınıza bağlanmayı ve bağlantı dizesi almayı dener. Tetikleyici sınıfını oluşturmak için Yerel kullanıcı gizli dizileri dosyasında bağlantı dizesi değeri kaydet'i ve ardından Son'u seçin.

    Bu tetikleyici örneği, adlı QueueStoragebir anahtarla depolama bağlantısı için bir uygulama ayarı kullanır. local.settings.json dosyasında depolanan bu anahtar, Azurite öykünücüsine veya bir Azure depolama hesabına başvurur.

  4. Yeni eklenen sınıfı inceleyin. Örneğin, aşağıdaki C# sınıfı temel bir Kuyruk depolama tetikleyicisi işlevini temsil eder:

    ile Functionözniteliklendirilen statik Run() bir yöntem görürsünüz. Bu öznitelik, yönteminin işlevin giriş noktası olduğunu gösterir.

    using System;
    using Azure.Storage.Queues.Models;
    using Microsoft.Azure.Functions.Worker;
    using Microsoft.Extensions.Logging;
    
    namespace Company.Function
    {
        public class QueueTriggerCSharp
        {
            private readonly ILogger<QueueTriggerCSharp> _logger;
    
            public QueueTriggerCSharp(ILogger<QueueTriggerCSharp> logger)
            {
                _logger = logger;
            }
    
            [Function(nameof(QueueTriggerCSharp))]
            public void Run([QueueTrigger("PathValue", Connection = "ConnectionValue")] QueueMessage message)
            {
                _logger.LogInformation($"C# Queue trigger function processed: {message.MessageText}");
            }
        }
    }
    

    ile FunctionNameözniteliklendirilen statik Run() bir yöntem görürsünüz. Bu öznitelik, yönteminin işlevin giriş noktası olduğunu gösterir.

    using System;
    using Microsoft.Azure.WebJobs;
    using Microsoft.Azure.WebJobs.Host;
    using Microsoft.Extensions.Logging;
    
    namespace Company.Function
    {
        public class QueueTriggerCSharp
        {
            [FunctionName("QueueTriggerCSharp")]
            public void Run([QueueTrigger("PathValue", Connection = "ConnectionValue")]string myQueueItem, ILogger log)
            {
                log.LogInformation($"C# Queue trigger function processed: {myQueueItem}");
            }
        }
    }
    

Giriş noktası yöntemine sağlanan her bağlama parametresine bağlamaya özgü bir öznitelik uygulanır. özniteliği bağlama bilgilerini parametre olarak alır. Önceki örnekte, ilk parametrenin QueueTrigger kuyruk depolama tetikleyicisi işlevini gösteren bir özniteliği uygulanmıştır. Kuyruk adı ve bağlantı dizesi ayar adı özniteliğine QueueTrigger parametre olarak geçirilir. Daha fazla bilgi için bkz. Azure İşlevleri için Azure Kuyruk depolama bağlamaları.

İşlev uygulaması projenize daha fazla işlev eklemek için yukarıdaki yordamı kullanın. Projedeki her işlevin farklı bir tetikleyicisi olabilir, ancak bir işlevin tam olarak bir tetikleyicisi olmalıdır. Daha fazla bilgi için bkz. Azure İşlevleri tetikleyicileri ve bağlama kavramları.

Bağlama ekleme

Tetikleyicilerde olduğu gibi, giriş ve çıkış bağlamaları işlevinize bağlama öznitelikleri olarak eklenir. İşleve bağlamaları aşağıdaki gibi ekleyin:

  1. Projeyi yerel geliştirme için yapılandırdığınızdan emin olun.

  2. Bağlamaya yönelik başvuru makalesinde bağlamaya özgü NuGet paketi gereksinimlerini bularak belirli bağlama için uygun NuGet uzantı paketini ekleyin. Örneğin, Event Hubs tetikleyicisi için paket gereksinimlerini Event Hubs bağlama başvurusu makalesinde bulabilirsiniz.

  3. Belirli bir paketi yüklemek için Paket Yöneticisi Konsolu'nda aşağıdaki komutu kullanın:

    Install-Package Microsoft.Azure.Functions.Worker.Extensions.<BINDING_TYPE> -Version <TARGET_VERSION>
    
    Install-Package Microsoft.Azure.WebJobs.Extensions.<BINDING_TYPE> -Version <TARGET_VERSION>
    

    Bu örnekte değerini bağlama uzantısına özgü adla ve <TARGET_VERSION> paketin gibi 4.0.0belirli bir sürümüyle değiştirin<BINDING_TYPE>. Geçerli sürümler, NuGet.org'deki tek tek paket sayfalarında listelenir.

  4. Bağlamanın ihtiyaç duyduğu uygulama ayarları varsa, bunları Values yerel ayar dosyasındaki koleksiyona ekleyin.

    İşlev, yerel olarak çalıştırıldığında bu değerleri kullanır. İşlev Azure'daki işlev uygulamasında çalıştırıldığında işlev uygulaması ayarlarını kullanır. Visual Studio, yerel ayarları Azure'da yayımlamayı kolaylaştırır.

  5. Yöntem imzasına uygun bağlama özniteliğini ekleyin. Aşağıdaki örnekte, bir kuyruk iletisi işlevi tetikler ve çıkış bağlaması farklı bir kuyrukta aynı metinle yeni bir kuyruk iletisi oluşturur.

     public class QueueTrigger
    {
        private readonly ILogger _logger;
    
        public QueueTrigger(ILoggerFactory loggerFactory)
        {
            _logger = loggerFactory.CreateLogger<QueueTrigger>();
        }
    
        [Function("CopyQueueMessage")]
        [QueueOutput("myqueue-items-destination", Connection = "QueueStorage")]
        public string Run([QueueTrigger("myqueue-items-source", Connection = "QueueStorage")] string myQueueItem)
        {
            _logger.LogInformation($"C# Queue trigger function processed: {myQueueItem}");
            return myQueueItem;
        }
    }
    

    QueueOutput özniteliği yöntemindeki bağlamayı tanımlar. Birden çok çıkış bağlaması için, bunun yerine bu özniteliği döndürülen nesnenin dize özelliğine yerleştirirsiniz. Daha fazla bilgi için bkz . Birden çok çıkış bağlaması.

    public static class SimpleExampleWithOutput
    {
        [FunctionName("CopyQueueMessage")]
        public static void Run(
            [QueueTrigger("myqueue-items-source", Connection = "QueueStorage")] string myQueueItem, 
            [Queue("myqueue-items-destination", Connection = "QueueStorage")] out string myQueueItemCopy,
            ILogger log)
        {
            log.LogInformation($"CopyQueueMessage function processed: {myQueueItem}");
            myQueueItemCopy = myQueueItem;
        }
    }
    

    Queue parametresindeki out özniteliği çıkış bağlamasını tanımlar.

    Kuyruk depolama bağlantısı ayarından QueueStorage alınır. Daha fazla bilgi için, belirli bağlama için başvuru makalesine bakın.

İşlevler tarafından desteklenen bağlamaların tam listesi için bkz . Desteklenen bağlamalar.

İşlevleri yerel olarak çalıştırma

Azure İşlevleri Temel Araçları, Azure İşlevleri projenizi yerel geliştirme bilgisayarınızda çalıştırmanıza olanak sağlar. İşlevler projesinde hata ayıklamak için F5 tuşuna bastığınızda, yerel İşlevler ana bilgisayarı (func.exe) yerel bir bağlantı noktasında (genellikle 7071) dinlemeye başlar. Çağrılabilen tüm işlev uç noktaları çıkışa yazılır ve işlevlerinizi test etmek için bu uç noktaları kullanabilirsiniz. Daha fazla bilgi için bkz. Azure İşlevleri Core Tools ile çalışma. Visual Studio'dan ilk kez bir işlev başlattığınızda bu araçları yüklemeniz istenir.

İşlevinizi Visual Studio'da hata ayıklama modunda başlatmak için:

  1. F5 tuşuna basın. İstenirse Visual Studio'dan gelen Azure İşlevleri Temel (CLI) araçlarını indirme ve yükleme isteğini kabul edin. Araçların HTTP isteklerini işleyebilmesi için bir güvenlik duvarı özel durumunu etkinleştirmeniz de gerekebilir.

  2. Proje çalışırken, dağıtılan bir işlevi test edeceğiniz gibi kodunuzu test edin.

    Visual Studio'yu hata ayıklama modunda çalıştırdığınızda kesme noktaları beklendiği gibi isabet alır.

Visual Studio kullanarak daha ayrıntılı bir test senaryosu için bkz . Test işlevleri.

Azure'a Yayımlama

İşlev projenizi Azure'da yayımladığınızda Visual Studio, proje dosyalarını dağıtmak için zip dağıtımını kullanır. Mümkün olduğunda, projenin dağıtım (.zip) paketinde çalışması için Paketten Çalıştır'ı da seçmeniz gerekir. Daha fazla bilgi için bkz . Azure'da bir paket dosyasından işlevlerinizi çalıştırma.

Web Dağıtımı (msdeploy) kullanarak Azure İşlevleri dağıtmayın.

Projenizi Azure'daki bir işlev uygulamasında yayımlamak için aşağıdaki adımları kullanın.

  1. Çözüm Gezgini'nde projeye sağ tıklayın ve Yayımla'yı seçin. Hedef bölümünde Azure'ı ve ardından İleri'yi seçin.

    Screenshot of publish window.

  2. Windows üzerinde çalışan bir işlev uygulaması oluşturan Belirli hedef için Azure İşlev Uygulaması 'nı (Windows) ve ardından İleri'yi seçin.

    Screenshot of publish window with specific target.

  3. İşlev Örneği'nde Yeni Azure İşlevi oluştur... öğesini seçin.

    Screenshot of create a new function app instance.

  4. Aşağıdaki tabloda belirtilen değerleri kullanarak yeni bir örnek oluşturun:

    Ayar Value Açıklama
    Adı Genel olarak benzersiz bir ad Yeni işlev uygulamanızı benzersiz şekilde tanımlayan ad. Bu adı kabul edin veya yeni bir ad girin. Geçerli karakterler şunlardır: a-z, 0-9ve -.
    Abonelik Aboneliğiniz Kullanılacak Azure aboneliği. Bu aboneliği kabul edin veya açılan listeden yeni bir abonelik seçin.
    Kaynak grubu Kaynak grubunuzun adı İşlev uygulamanızı oluşturmak istediğiniz kaynak grubu. Yeni bir kaynak grubu oluşturmak için Yeni'yi seçin. Açılan listeden mevcut bir kaynak grubunu da seçebilirsiniz.
    Plan Türü Tüketim Projenizi Tüketim planında çalışan bir işlev uygulamasına yayımladığınızda, yalnızca işlev uygulamanızın yürütülmesi için ödeme alırsınız. Diğer barındırma planları daha yüksek maliyetlere neden olur.
    Konum Uygulama hizmetinin konumu Size yakın bir bölgede veya işlevlerinizin eriştirileceği diğer hizmetlerde bir Konum seçin.
    Azure Depolama Genel amaçlı depolama hesabı İşlevler çalışma zamanı için bir Azure depolama hesabı gereklidir. Genel amaçlı bir depolama hesabı yapılandırmak için Yeni'yi seçin. Depolama hesabı gereksinimlerini karşılayan mevcut bir hesabı da seçebilirsiniz.
    Application Insights Uygulama Analizler örneği İşlev uygulamanız için Uygulama Analizler tümleştirmesini etkinleştirmeniz gerekir. Yeni bir örnekte veya mevcut log analytics çalışma alanında yeni bir örnek oluşturmak için Yeni'yi seçin. Ayrıca var olan bir örneği de seçebilirsiniz.

    Screenshot of Create App Service dialog.

  5. Azure'da bir işlev uygulaması ve ilgili kaynakları oluşturmak için Oluştur'u seçin. Kaynak oluşturma durumu pencerenin sol alt kısmında gösterilir.

  6. İşlevler örneğinde Paketten çalıştır dosyasının işaretli olduğundan emin olun. İşlev uygulamanız, Paketten Çalıştır modu etkinken Zip Dağıtımı kullanılarak dağıtılır. Zip Deploy, daha iyi performansa neden olan işlev projeniz için önerilen dağıtım yöntemidir.

    Screenshot of Finish profile creation.

  7. Son'u seçin ve Yayımla sayfasında Yayımla'yı seçerek proje dosyalarınızı içeren paketi Azure'daki yeni işlev uygulamanıza dağıtın.

    Dağıtım tamamlandıktan sonra, Azure'daki işlev uygulamasının kök URL'si Yayımla sekmesinde gösterilir.

  8. Yayımla sekmesinin Barındırma bölümünde Azure portalında aç'ı seçin. Bu işlem, Azure portalında yeni işlev uygulaması Azure kaynağını açar.

    Screenshot of Publish success message.

İşlev uygulaması ayarları

Projeyi yayımladığınızda Visual Studio bu ayarları otomatik olarak karşıya yüklemez. local.settings.json eklediğiniz tüm ayarları Azure'daki işlev uygulamasına da eklemeniz gerekir.

Gerekli ayarları Azure'daki işlev uygulamanıza yüklemenin en kolay yolu, Barındırma bölümünün yanındaki üç noktayı genişletmek ve projenizi başarıyla yayımladıktan sonra görüntülenen Azure Uygulaması Hizmeti ayarlarını yönet bağlantısını seçmektir.

Settings in Publish window

Bu bağlantıyı seçtiğinizde işlev uygulamasının Uygulama ayarları iletişim kutusu görüntülenir; burada yeni uygulama ayarları ekleyebilir veya mevcut ayarları değiştirebilirsiniz.

Application settings

Local , local.settings.json dosyasında bir ayar değeri görüntüler ve Uzak , Azure'daki işlev uygulamasında geçerli bir ayar değeri görüntüler. Yeni bir uygulama ayarı oluşturmak için Ayar ekle'yi seçin. Bir ayar değerini Uzak alanına kopyalamak için Yerelden değer ekle bağlantısını kullanın. Bekleyen değişiklikler, Tamam'ı seçtiğinizde yerel ayarlar dosyasına ve işlev uygulamasına yazılır.

Not

Varsayılan olarak, local.settings.json dosyası kaynak denetiminde işaretlenmez. Bu, kaynak denetiminden bir yerel İşlevler projesini klonlarsanız projenin local.settings.json dosyası olmadığı anlamına gelir. Bu durumda, Uygulama ayarları iletişim kutusunun beklendiği gibi çalışması için proje kökünde local.settings.json dosyasını el ile oluşturmanız gerekir.

Uygulama ayarlarını şu diğer yollardan biriyle de yönetebilirsiniz:

Uzaktan Hata Ayıklama

İşlev uygulamanızda uzaktan hata ayıklamak için projenizin hata ayıklama yapılandırmasını yayımlamanız gerekir. Ayrıca Azure'daki işlev uygulamanızda uzaktan hata ayıklamayı etkinleştirmeniz gerekir.

Bu bölümde, yayın yapılandırması kullanarak işlev uygulamanızda zaten yayımladığınız varsayılır.

Uzaktan hata ayıklamayla ilgili dikkat edilmesi gerekenler

  • Bir üretim hizmetinde uzaktan hata ayıklama önerilmez.
  • Yalnızca Kodum hata ayıklamasını etkinleştirdiyseniz devre dışı bırakın.
  • Uzaktan hata ayıklama sırasında kesme noktalarında uzun duraklardan kaçının. Azure, birkaç dakikadan uzun süre durdurulan bir işlemi yanıt vermeyen bir işlem olarak ele alır ve kapatır.
  • Hata ayıklarken, sunucu Visual Studio'ya veri gönderir ve bu da bant genişliği ücretlerini etkileyebilir. Bant genişliği oranları hakkında bilgi için bkz . Azure Fiyatlandırması.
  • İşlev uygulamanızda uzaktan hata ayıklama 48 saat sonra otomatik olarak devre dışı bırakılır. 48 saat sonra uzaktan hata ayıklamayı yeniden etkinleştirmeniz gerekir.

Hata ayıklayıcıyı ekleme

Hata ayıklayıcıyı ekleme yönteminiz yürütme modunuza bağlıdır. Yalıtılmış bir çalışan işlemi uygulamasında hata ayıklarken, şu anda uzak hata ayıklayıcıyı ayrı bir .NET işlemine eklemeniz gerekir ve diğer birkaç yapılandırma adımı gerekir.

İşiniz bittiğinde, uzaktan hata ayıklamayı devre dışı bırakmanız gerekir.

İşlevler konağından ayrı bir işlemde çalışan bir işlev uygulamasına uzak hata ayıklayıcı eklemek için:

  1. Yayımla sekmesinde Barındırma bölümünde üç noktayı (...) ve ardından Yayımlama profilini indir'iseçin. Bu eylem yayımlama profilinin bir kopyasını indirir ve indirme konumunu açar. Azure'da çalışan yalıtılmış çalışan işleminize eklemek için kullanılan kimlik bilgilerini içeren bu dosyaya ihtiyacınız vardır.

    Dikkat

    .publishsettings dosyası, işlev uygulamanızı yönetmek için kullanılan kimlik bilgilerinizi (kodlanmamış) içerir. Bu dosya için en iyi güvenlik uygulaması, dosyayı geçici olarak kaynak dizinlerinizin dışında (örneğin Kitaplıklar\Belgeler klasöründe) depolamak ve artık gerekmedikten sonra silmektir. .publishsettings dosyasına erişim elde eden kötü amaçlı bir kullanıcı işlev uygulamanızı düzenleyebilir, oluşturabilir ve silebilir.

  2. Yine Yayımla sekmesinden Barındırma bölümündeki üç noktayı (...) ve ardından Hata ayıklayıcı ekle'yi seçin.

    Screenshot of attaching the debugger from Visual Studio.

    Visual Studio, işlev uygulamanıza bağlanır ve önceden etkinleştirilmemişse uzaktan hata ayıklamayı etkinleştirir.

    Not

    Uzak hata ayıklayıcı konak işlemine bağlanamadığından bir hata görebilirsiniz. Her durumda, varsayılan hata ayıklama kodunuzda bozulmaz.

  3. Visual Studio'ya döndüğünüzde, Yayımla sayfasındaki Barındırma'nın altındaki Sitenin URL'sini kopyalayın.

  4. Hata Ayıkla menüsünde İşleme Ekle'yi seçin ve İşleme ekle penceresinde URL'yi Bağlan ion Hedefine yapıştırın, bağlantı noktasını :4024kaldırın https:// ve ekleyin.

    Hedefinizin gibi <FUNCTION_APP>.azurewebsites.net:4024 göründüğünü doğrulayın ve Enter tuşuna basın.

    Visual Studio attach to process dialog

  5. İstenirse, yerel güvenlik duvarınız üzerinden Visual Studio erişimine izin verin.

  6. Kimlik bilgileri istendiğinde, yerel kullanıcı kimlik bilgileri yerine farklı bir hesap seçin (Windows'da diğer seçenekler ). Windows'daki kimlik doğrulama iletişim kutusundaki E-posta adresi ve Parola için yayımlanan profilden userName ve userPWD değerlerini sağlayın. Dağıtım sunucusuyla güvenli bir bağlantı kurulduktan sonra, kullanılabilir işlemler gösterilir.

    Visual Studio enter credential

  7. Tüm kullanıcılardan işlemi göster'i işaretleyin ve ardından dotnet.exe'ı seçin ve Ekle'yi seçin. İşlem tamamlandığında, yalıtılmış bir çalışan işleminde çalışan C# sınıf kitaplığı kodunuz eklenir. Bu noktada işlev uygulamanızın hatalarını normal şekilde ayıklayabilirsiniz.

İşlevler konağıyla işlem halinde çalışan bir işlev uygulamasına uzak hata ayıklayıcı eklemek için:

  • Yayımla sekmesinde Barındırma bölümünde üç noktayı (...) ve ardından Hata ayıklayıcı ekle'yi seçin.

    Screenshot of attaching the debugger from Visual Studio.

Visual Studio, işlev uygulamanıza bağlanır ve önceden etkinleştirilmemişse uzaktan hata ayıklamayı etkinleştirir. Ayrıca hata ayıklayıcıyı bulur ve uygulamanın konak işlemine ekler. Bu noktada işlev uygulamanızın hatalarını normal şekilde ayıklayabilirsiniz.

Uzaktan hata ayıklamayı devre dışı bırakma

Kodunuzda uzaktan hata ayıklamayı tamamladıktan sonra Azure portalında uzaktan hata ayıklamayı devre dışı bırakmanız gerekir. Unutmanız durumunda uzaktan hata ayıklama 48 saat sonra otomatik olarak devre dışı bırakılır.

  1. Projenizin Yayımla sekmesinde Barındırma bölümünde üç noktayı (...)ve ardından Azure portalında aç'ı seçin. Bu eylem, projenizin dağıtıldığı Azure portalında işlev uygulamasını açar.

  2. İşlevler uygulamasında ayarlar'ın altında Yapılandırma'yı seçin, Genel Ayarlar'ı seçin, Uzaktan Hata Ayıklama'yı Kapalı olarak ayarlayın ve Kaydet'i ve ardından Devam'ı seçin.

İşlev uygulaması yeniden başlatıldıktan sonra artık uzak işlemlerinize uzaktan bağlanamayasınız. Visual Studio dışında uzaktan hata ayıklamayı etkinleştirmek için Azure portalında aynı sekmeyi kullanabilirsiniz.

İzleme işlevleri

İşlevlerinizin yürütülmesini izlemenin önerilen yolu, işlev uygulamanızı Azure Uygulaması Analizler tümleştirmektir. Visual Studio yayımlama sırasında işlev uygulamanızı oluştururken bu tümleştirmeyi etkinleştirmeniz gerekir.

Bazı nedenlerden dolayı tümleştirme yayımlama sırasında yapılmadıysa, Azure'da işlev uygulamanız için Uygulama Analizler tümleştirmesini etkinleştirmeniz gerekir.

Uygulama Analizler kullanarak izleme hakkında daha fazla bilgi edinmek için bkz. İzleme Azure İşlevleri.

İşlevleri test etme

Bu bölümde, xUnit ile test edebilirsiniz bir C# işlem içi model projesinin nasıl oluşturulacağı açıklanmaktadır.

Testing Azure Functions with C# in Visual Studio

1. Kurulum

Testlerinizi desteklemek için gereken uygulama projesi ve işlevleri dahil olmak üzere ortamı yapılandırmak için şu adımları kullanın:

  1. Yeni bir İşlevler uygulaması oluşturma ve İşlevler olarak adlandırma
  2. Şablondan bir HTTP işlevi oluşturun ve bunu MyHttpTrigger olarak adlandırın.
  3. Şablondan bir zamanlayıcı işlevi oluşturun ve myTimerTrigger olarak adlandırın.
  4. Çözümde bir xUnit Test uygulaması oluşturun ve functions.Tests olarak adlandırın. Varsayılan test dosyalarını kaldırın.
  5. Test uygulamasından Microsoft.AspNetCore.Mvc'ye başvuru eklemek için NuGet kullanma
  6. Functions.Tests uygulamasından İşlevler uygulamasına başvurun.

Projeler oluşturulduğuna göre, otomatikleştirilmiş testleri çalıştırmak için kullanılan sınıfları oluşturabilirsiniz.

2. Test sınıfları oluşturma

Her işlev, ileti günlüğünü işlemek için öğesinin ILogger bir örneğini alır. Bazı testler iletileri günlüğe kaydetmez veya günlüğe kaydetmenin nasıl uygulandığı konusunda endişeleri yoktur. Testin geçip geçmediğini belirlemek için diğer testlerin günlüğe kaydedilen iletileri değerlendirmesi gerekir.

  1. Test sırasında değerlendirilecek iletilerin iç listesini tutan adlı ListLoggerbir sınıf oluşturun. Gerekli ILogger arabirimi uygulamak için sınıfın bir kapsama ihtiyacı vardır. Aşağıdaki sınıf, test çalışmalarının sınıfa geçmesi için bir kapsamı taklit eder ListLogger .

  2. Functions.Tests projenizde NullScope.cs adlı yeni bir sınıf oluşturun ve şu kodu ekleyin:

    using System;
    
    namespace Functions.Tests
    {
        public class NullScope : IDisposable
        {
            public static NullScope Instance { get; } = new NullScope();
    
            private NullScope() { }
    
            public void Dispose() { }
        }
    }
    
  3. Functions.Tests projenizde ListLogger.cs adlı bir sınıf oluşturun ve şu kodu ekleyin:

    using Microsoft.Extensions.Logging;
    using System;
    using System.Collections.Generic;
    using System.Text;
    
    namespace Functions.Tests
    {
        public class ListLogger : ILogger
        {
            public IList<string> Logs;
    
            public IDisposable BeginScope<TState>(TState state) => NullScope.Instance;
    
            public bool IsEnabled(LogLevel logLevel) => false;
    
            public ListLogger()
            {
                this.Logs = new List<string>();
            }
    
            public void Log<TState>(LogLevel logLevel,
                                    EventId eventId,
                                    TState state,
                                    Exception exception,
                                    Func<TState, Exception, string> formatter)
            {
                string message = formatter(state, exception);
                this.Logs.Add(message);
            }
        }
    }
    

    sınıfı, ListLogger arabirimi tarafından ILogger sözleşmeli olarak aşağıdaki üyeleri uygular:

    • BeginScope: Kapsamlar, günlüğünüze bağlam ekler. Bu durumda test, testin çalışmasına izin vermek için yalnızca sınıfındaki NullScope statik örneği gösterir.

    • IsEnabled: varsayılan değeri false sağlanır.

    • Günlük: Bu yöntem, sağlanan formatter işlevi kullanarak iletiyi biçimlendirip sonuçta elde edilen metni koleksiyona Logs ekler.

    Koleksiyon Logs bir örneğidir List<string> ve oluşturucuda başlatılır.

  4. functions.tests projesinde LoggerTypes.cs adlı bir kod dosyası oluşturun ve şu kodu ekleyin:

    namespace Functions.Tests
    {
        public enum LoggerTypes
        {
            Null,
            List
        }
    }
    

    Bu numaralandırma, testler tarafından kullanılan günlükçü türünü belirtir.

  5. functions.tests projesinde TestFactory.cs adlı bir sınıf oluşturun ve şu kodu ekleyin:

    using Microsoft.AspNetCore.Http;
    using Microsoft.AspNetCore.Http.Internal;
    using Microsoft.Extensions.Logging;
    using Microsoft.Extensions.Logging.Abstractions;
    using Microsoft.Extensions.Primitives;
    using System.Collections.Generic;
    
    namespace Functions.Tests
    {
        public class TestFactory
        {
            public static IEnumerable<object[]> Data()
            {
                return new List<object[]>
                {
                    new object[] { "name", "Bill" },
                    new object[] { "name", "Paul" },
                    new object[] { "name", "Steve" }
    
                };
            }
    
            private static Dictionary<string, StringValues> CreateDictionary(string key, string value)
            {
                var qs = new Dictionary<string, StringValues>
                {
                    { key, value }
                };
                return qs;
            }
    
            public static HttpRequest CreateHttpRequest(string queryStringKey, string queryStringValue)
            {
                var context = new DefaultHttpContext();
                var request = context.Request;
                request.Query = new QueryCollection(CreateDictionary(queryStringKey, queryStringValue));
                return request;
            }
    
            public static ILogger CreateLogger(LoggerTypes type = LoggerTypes.Null)
            {
                ILogger logger;
    
                if (type == LoggerTypes.List)
                {
                    logger = new ListLogger();
                }
                else
                {
                    logger = NullLoggerFactory.Instance.CreateLogger("Null Logger");
                }
    
                return logger;
            }
        }
    }
    

    TestFactory sınıfı aşağıdaki üyeleri uygular:

    • Veri: Bu özellik, örnek verilerin IEnumerable koleksiyonunu döndürür. Anahtar değer çiftleri, sorgu dizesine geçirilen değerleri temsil eder.

    • CreateDictionary: Bu yöntem bağımsız değişken olarak bir anahtar/değer çifti kabul eder ve sorgu dizesi değerlerini temsil etmek için oluşturmak QueryCollection için kullanılan yeni Dictionary bir değer döndürür.

    • CreateHttpRequest: Bu yöntem, verilen sorgu dizesi parametreleriyle başlatılan bir HTTP isteği oluşturur.

    • CreateLogger: Günlükçü türüne bağlı olarak, bu yöntem test için kullanılan bir günlükçü sınıfı döndürür. , ListLogger testlerde değerlendirme için kullanılabilecek günlüğe kaydedilen iletileri izler.

  6. functions.tests projesinde FunctionsTests.cs adlı bir sınıf oluşturun ve şu kodu ekleyin:

    using Microsoft.AspNetCore.Mvc;
    using Microsoft.Extensions.Logging;
    using Xunit;
    
    namespace Functions.Tests
    {
        public class FunctionsTests
        {
            private readonly ILogger logger = TestFactory.CreateLogger();
    
            [Fact]
            public async void Http_trigger_should_return_known_string()
            {
                var request = TestFactory.CreateHttpRequest("name", "Bill");
                var response = (OkObjectResult)await MyHttpTrigger.Run(request, logger);
                Assert.Equal("Hello, Bill. This HTTP triggered function executed successfully.", response.Value);
            }
    
            [Theory]
            [MemberData(nameof(TestFactory.Data), MemberType = typeof(TestFactory))]
            public async void Http_trigger_should_return_known_string_from_member_data(string queryStringKey, string queryStringValue)
            {
                var request = TestFactory.CreateHttpRequest(queryStringKey, queryStringValue);
                var response = (OkObjectResult)await MyHttpTrigger.Run(request, logger);
                Assert.Equal($"Hello, {queryStringValue}. This HTTP triggered function executed successfully.", response.Value);
            }
    
            [Fact]
            public void Timer_should_log_message()
            {
                var logger = (ListLogger)TestFactory.CreateLogger(LoggerTypes.List);
                new MyTimerTrigger().Run(null, logger);
                var msg = logger.Logs[0];
                Assert.Contains("C# Timer trigger function executed at", msg);
            }
        }
    }
    

    Bu sınıfta uygulanan üyeler şunlardır:

    • Http_trigger_should_return_known_string: Bu test, bir HTTP işlevine sorgu dizesi değerleriyle name=Bill bir istek oluşturur ve beklenen yanıtın döndürüldüğünü denetler.

    • Http_trigger_should_return_string_from_member_data: Bu test, HTTP işlevine örnek veriler sağlamak için xUnit özniteliklerini kullanır.

    • Timer_should_log_message: Bu test bir örneğini ListLogger oluşturur ve bir zamanlayıcı işlevine geçirir. İşlev çalıştırıldıktan sonra, beklenen iletinin mevcut olduğundan emin olmak için günlük denetlenecektir.

  7. Testlerinizdeki uygulama ayarlarına erişmek için işlevinize sahte ortam değişkeni değerlerine sahip bir IConfiguration örnek ekleyebilirsiniz.

3. Testleri çalıştırma

Testleri çalıştırmak için Test Gezgini'ne gidin ve Görünümde Tüm Testleri Çalıştır'ı seçin.

Testing Azure Functions with C# in Visual Studio

4. Testlerde hata ayıklama

Testlerde hata ayıklamak için testte bir kesme noktası ayarlayın, Test Gezgini'ne gidin ve Son Çalıştırmada Hata Ayıkla'yı > seçin.

Sonraki adımlar

Azure İşlevleri Temel Araçları hakkında daha fazla bilgi için bkz. Azure İşlevleri Core Araçları ile çalışma.