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.
Visual Studio menüsünden Dosya>Yeni Proje'yi> seçin.
Yeni proje oluştur'da, arama kutusuna işlevler yazın, Azure İşlevleri şablonunu seçin ve ardından İleri'yi seçin.
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.
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ı. 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.
İş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=true
ayarlayı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:
Azure portalında depolama hesabınıza gidin.
Erişim anahtarları sekmesinde, Güvenlik + ağ'ın altında key1'in Bağlantı dizesini kopyalayın.
Projenizde local.settings.json dosyasını açın ve anahtarın
AzureWebJobsStorage
değerini kopyaladığınız bağlantı dizesine ayarlayın.İş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.
Çözüm Gezgini proje düğümünüzü sağ tıklatın veYeni Öğe Ekle'yi> seçin.
Azure İşlevi'ni seçin, sınıf için bir Ad girin ve ekle'yi seçin.
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.
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ı
QueueStorage
anahtarla 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.Yeni eklenen sınıfı inceleyin. özniteliğiyle
FunctionName
ilişkilendirilen statikRun()
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:
Projeyi yerel geliştirme için yapılandırdığınızdan emin olun.
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.
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>
paketinin3.0.0-beta5
gibi 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.Bağlamanın ihtiyaç duyduğu uygulama ayarları varsa bunları yerel ayar dosyasındaki koleksiyona ekleyin
Values
.İş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.
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:
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.
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:
- Web Dağıtımı: Windows uygulamalarını paketler ve herhangi bir IIS sunucusuna dağıtır.
- Paketten Çalıştır etkin zip dağıtımı: Azure İşlevleri dağıtımları için önerilir.
Projenizi Azure'daki bir işlev uygulamasında yayımlamak için aşağıdaki adımları kullanın.
Çö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.
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.
İşlev ÖrneğindeYeni Azure İşlevi oluştur... öğesini seçin.
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-9
ve-
.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. 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.
İş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.
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.
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.
İş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.
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.
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:
- Azure portalı kullanın.
--publish-local-settings
Azure İşlevleri Çekirdek Araçları'ndaki yayımlama seçeneğini kullanın.- Azure CLI'yi kullanın.
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, 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.
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.
İş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.
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:
- Yeni bir İşlevler uygulaması oluşturma ve İşlevler olarak adlandırma
- Şablondan bir HTTP işlevi oluşturun ve bunu MyHttpTrigger olarak adlandırın.
- Şablondan bir zamanlayıcı işlevi oluşturun ve myTimerTrigger olarak adlandırın.
- Çözümde bir xUnit Test uygulaması oluşturun ve functions.Tests olarak adlandırın. Varsayılan test dosyalarını kaldırın.
- Test uygulamasından Microsoft.AspNetCore.Mvc'ye başvuru eklemek için NuGet kullanma
- 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ı ListLogger
yeni 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 koleksiyonaLogs
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 yeniDictionary
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.
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
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.
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.
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
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.
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.
VSIX Yükleyicisi'nde, araçları güncelleştirmek için Değiştir'i seçin.
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.