Visual Studio ile Azure İşlevleri geliştirme

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

Visual Studio, işlevlerinizi geliştirirken aşağıdaki avantajları sağlar:

  • Yerel geliştirme bilgisayarınızda işlevleri düzenleyin, derleyin ve çalıştırın.
  • Azure İşlevleri projenizi doğrudan Azure'da yayımlayın ve gerektiğinde Azure kaynakları oluşturun.
  • İşlev bağlamalarını doğrudan C# kodunda bildirmek için C# özniteliklerini kullanın.
  • Önceden derlenmiş C# işlevleri geliştirin ve dağıtın. Önceden derlenmiş işlevler, C# betik tabanlı işlevlere göre daha iyi bir soğuk başlangıç performansı sağlar.
  • Visual Studio geliştirmenin tüm avantajlarına sahip olurken işlevlerinizi C# dilinde kodlayı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. Bu makaleyi okumadan önce Visual Studio için İşlevler hızlı başlangıcını tamamlayın.

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 İşlevleri Araçları. Azure İşlev Araçları'nı eklemek için Visual Studio yüklemenize Azure geliştirme iş yükünü ekleyin. Visual Studio 2017 kullanıyorsanız bazı ek yükleme adımlarını izlemeniz gerekebilir.

  • 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 ücretsiz bir Azure hesabı oluşturun.

Azure İşlevleri projesi oluşturma

Visual Studio'daki Azure İşlevleri proje şablonu, Azure'daki bir işlev uygulamasında yayımlayabileceğiniz bir C# sınıf kitaplığı projesi oluşturur. Kaynakların daha kolay yönetilmesi, dağıtılması, ölçeklenmesi ve paylaşılması için işlevleri 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 uygulaması oluştur ayarları için aşağıdaki tabloda yer alan değerleri kullanın:

    Ayar Değer 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 halinde çalışan bir işlev projesi oluşturur. Azure İşlevleri 1.x, .NET Framework’ü destekler. Daha fazla bilgi için bkz. Azure İşlevleri çalışma zamanı sürümlerine genel bakış.
    İşlev şablonu HTTP tetikleyicisi Bu değer, BIR HTTP isteği tarafından tetiklenen bir işlev oluşturur.
    Depolama hesabı (AzureWebJobsStorage) 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 Azure Depolama hesabı bağlantı dizesi kullanmaz; diğer tüm tetikleyici türleri için geçerli bir Azure Depolama hesabı bağlantı dizesi gerekir.
    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ı.

    Proje ayarlarını Azure İşlevleri

    Yetkilendirme düzeyiniAnonim olarak ayarladığınızdan emin olun. varsayılan İşlev düzeyini seçerseniz işlev uç noktanıza erişmek için isteklerde 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, 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ıştırılı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 bkz . İşlevler sınıf kitaplığı projesi.

Yerel ayarlar

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 nesnesine Values eklenir. local.settings.json dosyası, yerel geliştirme araçları tarafından kullanılan ayarları da depolar.

local.settings.json dosyasında bağlantı dizeleri gibi gizli diziler olabileceğinden, bunu hiçbir zaman uzak bir depoda depolamamalısınız. Yerel ayarlar hakkında daha fazla bilgi edinmek için bkz. Yerel ayarlar dosyası.

Projeyi yayımladığınızda Visual Studio local.settings.json dosyasındaki 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ın Values.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. Dağıtımdan önce bu ayarı gerçek bir depolama hesabı bağlantı dizesi olarak değiştirin. Daha fazla bilgi için bkz. Yerel depolama öykünücüsü.

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

  1. Azure portalında depolama hesabınıza gidin.

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

  3. Projenizde local.settings.json dosyasını açın ve anahtarın AzureWebJobsStorage değerini kopyaladığınız bağlantı dizesine 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. Sağlanan şablonlardan işlev tetikleyicilerinizi oluşturduğunuzda tetikleyici öznitelikleri sizin için uygulanır.

  1. Çözüm Gezgini proje düğümünüzü sağ tıklatın veYeni Öğe Ekle'yi> seçin.

  2. Azure İşlevi'ni seçin, sınıf için bir Ad girin ve ekle'yi seçin.

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

    Kuyruk depolama tetikleyici işlevi oluşturma

    Ardından Azurite depolama öykünücüsü veya sağlanan bir Azure depolama hesabına başvurma arasında seçim yapmanız istenir.

    Bu tetikleyici örneği adlı QueueStorageanahtarla bir bağlantı dizesi kullanır. local.settings.json dosyasında depolanan bu anahtar, Azurite öykünücüsne veya bir Azure depolama hesabına başvurur.

  4. Yeni eklenen sınıfı inceleyin. özniteliğiyle FunctionName ilişkilendirilen statik Run() bir yöntem görürsünüz. Bu öznitelik, yönteminin işlevin giriş noktası olduğunu gösterir.

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

    using System;
    using Microsoft.Azure.WebJobs;
    using Microsoft.Azure.WebJobs.Host;
    using Microsoft.Extensions.Logging;
    
    namespace FunctionApp1
    {
        public static class Function1
        {
            [FunctionName("QueueTriggerCSharp")]
            public static void Run([QueueTrigger("myqueue-items", 
                Connection = "QueueStorage")]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 kuyruk depolama tetikleyicisi işlevini gösteren bir QueueTrigger ö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. tetikleyiciler ve bağlamalar kavramları Azure İşlevleri.

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.WebJobs.Extensions.<BINDING_TYPE> -Version <TARGET_VERSION>
    

    Bu örnekte öğesini bağlama uzantısına özgü adla ve <TARGET_VERSION> paketinin 3.0.0-beta5gibi belirli bir sürümüyle değiştirin<BINDING_TYPE>. Geçerli sürümler , NuGet.org'daki tek tek paket sayfalarında listelenir. İşlevler çalışma zamanı 1.x veya 2.x'e karşılık gelen ana sürümler bağlamanın başvuru makalesinde belirtilir.

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

    İş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.

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

    Kuyruk depolama bağlantısı ayarından AzureWebJobsStorage alınır. Daha fazla bilgi için, belirli bağlamaya yönelik 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 da etkinleştirmeniz 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ına beklendiği gibi isabet edilir.

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

Azure’da Yayımlama

Visual Studio'dan yayımladığınızda, iki dağıtım yönteminden birini kullanır:

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.

    Yayımla penceresinin ekran görüntüsü.

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

    Belirli bir hedefe sahip yayımlama penceresinin ekran görüntüsü.

  3. İşlev ÖrneğindeYeni Azure İşlevi oluştur... öğesini seçin.

    Yeni işlev uygulaması örneği oluşturma ekran görüntüsü.

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

    Ayar Değer 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. Açılan listeden mevcut bir kaynak grubunu seçin veya yeni bir kaynak grubu oluşturmak için Yeni'yi seçin.
    Plan Türü Tüketim Projenizi Tüketim planında çalışan bir işlev uygulamasında yayımladığınızda, yalnızca işlev uygulamanızın yürütmeleri için ödeme alırsınız. Diğer barındırma planları daha yüksek maliyetler doğurmaktadır.
    Konum App Service'in konumu Size veya işlevlerinizin eriştirileceği diğer hizmetlere yakın bir bölgedekonum 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.

    App Service Oluştur iletişim kutusunun ekran görüntüsü.

  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ğindePaketten çalıştır dosyasının işaretli olduğundan emin olun. İşlev uygulamanız, Paketten Çalıştır modu etkin olarak Zip Dağıtımı kullanılarak dağıtılır. Zip Deploy, işlev projeniz için önerilen dağıtım yöntemidir ve daha iyi performans sağlar.

    Son profil oluşturma işleminin ekran görüntüsü.

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

    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'de aç'ı seçin. Bu işlem, Azure portal yeni işlev uygulaması Azure kaynağını açar.

    Başarılı yayımla iletisinin ekran görüntüsü.

İşlev uygulaması ayarları

Projeyi yayımladığınızda Visual Studio bu ayarları otomatik olarak karşıya yüklemez. local.settings.json dosyasına 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 App Service ayarlarını yönet bağlantısını seçmektir.

Yayımla penceresindeki ayarlar

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.

Uygulama ayarları

Local , local.settings.json dosyasında bir ayar değeri görüntülerken 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 kopyalarsanız projenin local.settings.json dosyasına sahip 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ıklama konusunda dikkat edilmesi gerekenler

  • Ü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 48 saat sonra uzaktan hata ayıklama otomatik olarak devre dışı bırakılır. 48 saat sonra uzaktan hata ayıklamayı yeniden etkinleştirmeniz gerekir.

Hata ayıklayıcısını 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ğıyla devam eden bir işlev uygulamasına uzaktan hata ayıklayıcı eklemek için:

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

    Visual Studio'dan hata ayıklayıcı ekleme işleminin ekran görüntüsü.

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ısını 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

Kodunuzun uzaktan hata ayıklamasını tamamladıktan sonra Azure portal 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ündeki üç noktayı (...) ve ardından Azure portal'de aç'ı seçin. Bu eylem, projenizin dağıtıldığı Azure portal 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 aynı sekmeyi kullanabilirsiniz.

İzleme işlevleri

İşlevlerinizin yürütülmesini izlemenin önerilen yolu, işlev uygulamanızı Azure Uygulaması Insights ile tümleştirmektir. Azure portal bir işlev uygulaması oluşturduğunuzda, bu tümleştirme sizin için varsayılan olarak gerçekleştirilir. Ancak, Visual Studio yayımlama sırasında işlev uygulamanızı oluşturduğunuzda, Azure'daki işlev uygulamanızda tümleştirme yapılmaz. Application Insights'ı işlev uygulamanıza bağlamayı öğrenmek için bkz. Application Insights tümleştirmesini etkinleştirme.

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

İşlevleri test etme

Bu bölümde, Visual Studio'da C# işlev uygulaması projesi oluşturma ve xUnit ile çalıştırma ve test etme işlemleri açıklanmaktadır.

Visual Studio'da C# ile Azure İşlevleri test etme

Kurulum

Ortamınızı ayarlamak için bir işlev oluşturun ve uygulamayı test edin. Aşağıdaki adımlar testleri desteklemek için gereken uygulamaları ve işlevleri oluşturmanıza yardımcı olur:

  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.

Test sınıfları oluşturma

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

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

Test sırasında değerlendirilecek iletilerin iç listesini tutan adlı ListLoggeryeni bir sınıf oluşturacaksınız. 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 .

Functions.Tests projesinde NullScope.cs adlı yeni bir sınıf oluşturun ve aşağıdaki kodu girin:

using System;

namespace Functions.Tests
{
    public class NullScope : IDisposable
    {
        public static NullScope Instance { get; } = new NullScope();

        private NullScope() { }

        public void Dispose() { }
    }
}

Ardından , Functions.Tests projesinde ListLogger.cs adlı yeni bir sınıf oluşturun ve aşağıdaki kodu girin:

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 sınıfındaki NullScope statik örneğe işaret etmektedir.

  • 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.

Ardından , Functions.Tests projesinde LoggerTypes.cs adlı yeni bir dosya oluşturun ve aşağıdaki kodu girin:

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

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

Şimdi Functions.Tests projesinde TestFactory.cs adlı yeni bir sınıf oluşturun ve aşağıdaki kodu girin:

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.

Son olarak Functions.Tests projesinde FunctionsTests.cs adlı yeni bir sınıf oluşturun ve aşağıdaki kodu girin:

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.

Testlerinizdeki uygulama ayarlarına erişmek istiyorsanız, işlevinize sahte ortam değişkeni değerlerine sahip bir IConfiguration örnek ekleyebilirsiniz.

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.

Visual Studio'da C# ile Azure İşlevleri test etme

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.

Visual Studio 2017 ile Azure İşlevleri araçları

Azure İşlevleri Araçları, Visual Studio 2017'den başlayarak Azure geliştirme iş yükünde kullanılabilir. Visual Studio 2017'de Azure geliştirme iş yükü, Azure İşlevleri Araçları'nı ayrı bir uzantı olarak yükler. Visual Studio 2019 ve sonraki sürümlerde, Azure İşlevleri araçları uzantısı Visual Studio'nun bir parçası olarak güncelleştirilir.

Visual Studio 2017 yüklemenizi güncelleştirdiğinizde, Azure İşlevleri Araçları'nın en son sürümünü kullandığınızdan emin olun. Aşağıdaki bölümlerde Visual Studio 2017'de Azure İşlevleri Araçları uzantısını nasıl denetleyeceğini ve (gerekirse) nasıl güncelleştireceğiniz gösterilir.

Visual Studio 2017'de araç sürümünüzü denetleme

  1. Araçlar menüsünde Uzantılar ve Güncelleştirmeler'ı seçin. Yüklü Araçlar'ı> genişletin ve Azure İşlevleri ve Web İşleri Araçları'nı seçin.

    İşlevler araçları sürümünü doğrulama

  2. Yüklü Sürümü not edin ve bu sürümü sürüm notlarında listelenen en son sürümle karşılaştırın.

  3. Sürümünüz eskiyse, visual studio'daki araçlarınızı aşağıdaki bölümde gösterildiği gibi güncelleştirin.

Visual Studio'da araçlarınızı güncelleştirme

  1. Uzantılar ve Güncelleştirmeler iletişim kutusunda Güncelleştirmeler>Visual Studio Market'i genişletin, Azure İşlevleri ve Web İşleri Araçları'nı seçin ve Güncelleştir'i seçin.

    İşlevler araçları sürümünü güncelleştirme

  2. Araç güncelleştirmesi indirildikten sonra Kapat'ı seçin ve ardından VSIX Yükleyicisi ile araç güncelleştirmesini tetikleme amacıyla Visual Studio'yu kapatın.

  3. VSIX Yükleyicisi'nde, araçları güncelleştirmek için Değiştir'i seçin.

  4. Güncelleştirme tamamlandıktan sonra Kapat'ı seçin ve Visual Studio'yu yeniden başlatın.

Sonraki adımlar

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

.NET sınıf kitaplıkları olarak işlev geliştirme hakkında daha fazla bilgi için bkz. C# geliştirici başvurusu Azure İşlevleri. Bu makalede ayrıca, Azure İşlevleri tarafından desteklenen çeşitli bağlama türlerini bildirmek için özniteliklerin nasıl kullanılacağına ilişkin örneklere de bağlantı verilmektedir.