Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Visual Studio, C# sınıf kitaplığı işlevlerini Azure'a geliştirme, test etme ve dağıtmanın bir yolunu sağlar. Bu deneyim Azure İşlevleri ile ilk deneyiminizse bkz. Azure İşlevlerine genel bakış.
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ılı bilgiler 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 işlem içi model.
Bu makalenin 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 hesabınız yoksa, başlamadan önce ücretsiz hesap 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.
Visual Studio menüsünden Dosya>> seçin.
Yeni proje oluştur iletişim kutusunda arama kutusuna işlevler yazın, Azure İşlevleri şablonunu seçin ve ardından İleri'yi seçin.
Yeni projenizi yapılandırın iletişim kutusunda, Proje adı için projeniz için bir ad girin ve İleri'yi 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.
Ek bilgiler iletişim kutusunda, aşağıdaki tabloda listelenen eylemleri gerçekleştirin:
Ayar Eylem Açıklama İşlevler çalışanı .NET 8.0 Yalıtılmış (Uzun Süreli Destek) seçeneğini belirleyin. Visual Studio yalıtılmış bir işlemde çalışan bir işlev projesi oluşturur. Yalıtılmış çalışan işlemi, uzun vadeli destek (LTS) sunmayan diğer .NET ve .NET Framework sürümlerini de destekler. Daha fazla bilgi için bkz. Azure İşlevleri çalışma zamanı sürümlerine genel bakış. Function Http tetikleyicisi'ni seçin. Visual Studio, HTTP isteği tarafından tetiklenen bir işlev oluşturur. Çalışma zamanı depolama hesabı için Azurite kullanma (AzureWebJobsStorage) Bu onay kutusunu seçin. 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 Depolama hesabı bağlantı dizesi kullanmaz. Diğer tüm tetikleyici türleri için geçerli bir Depolama hesabı bağlantı dizesi gerekir. Yetkilendirme düzeyi Anonim'i seçin. Bu yetkilendirme ayarını kullandığınızda, herhangi bir istemci bir anahtar sağlamadan oluşturulan işlevi tetikleyebilir. Bu yapılandırma, yeni işlevinizi test etmenizi kolaylaştırır. Daha fazla bilgi için bkz . Yetkilendirme düzeyi. Ayar Eylem Açıklama İşlevler çalışanı .NET 8.0 İşlemde (Uzun Süreli Destek) seçeneğini belirleyin. Visual Studio, İşlevler çalışma zamanının 4.x sürümüyle işlem halinde çalışan bir işlev projesi oluşturur. Daha fazla bilgi için bkz. Azure İşlevleri çalışma zamanı sürümlerine genel bakış. Function Http tetikleyicisi'ni seçin. Visual Studio, HTTP isteği tarafından tetiklenen bir işlev oluşturur. Çalışma zamanı depolama hesabı için Azurite kullanma (AzureWebJobsStorage) Bu onay kutusunu seçin. 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 Depolama hesabı bağlantı dizesi kullanmaz. Diğer tüm tetikleyici türleri için geçerli bir Depolama hesabı bağlantı dizesi gerekir. Yetkilendirme düzeyi Anonim'i seçin Bu yetkilendirme ayarını kullandığınızda, herhangi bir istemci bir anahtar sağlamadan oluşturulan işlevi tetikleyebilir. Bu yapılandırma, yeni işlevinizi test etmenizi kolaylaştırır. Daha fazla bilgi için bkz . Yetkilendirme düzeyi. Yetkilendirme düzeyini Anonim olarak ayarladığınızdan emin olun. varsayılan İşlev düzeyini seçerseniz işlev uç noktanıza erişim isteklerinde işlev anahtarını sunmanız gerekir.
İşlev projesini ve HTTP tetikleyici işlevini oluşturmak için Oluştur'u seçin.
İşlevler projesi oluşturduktan sonra proje şablonu bir C# projesi oluşturur, ve Microsoft.Azure.Functions.Worker NuGet paketlerini yükler Microsoft.Azure.Functions.Worker.Sdk ve hedef çerçeveyi ayarlar.
İşlevler 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: Bu dosya, İşlevler ana bilgisayarını yapılandırmanız için bir yol sağlar. 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: Bu dosya, işlevleri yerel olarak çalıştırdığınızda kullandığınız ayarları korur. Uygulamanız Azure'da çalıştırıldığında bu ayarlar kullanılmaz. Daha fazla bilgi için bkz . Yerel olarak uygulama ayarlarıyla çalışma.
Önemli
local.settings.json dosyası gizli diziler içerebileceğinden, dosyayı proje kaynak denetiminizden dışlamanız gerekir. Bu dosyanın Özellikler iletişim kutusunda Çı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
İşlev uygulamanız Azure'da çalıştığında, işlevlerinizin gerektirdiği ayarlar uygulama ayarlarında şifrelenmiş olarak depolanır. Yerel geliştirme sırasında, bu ayarlar Values dosyasındaki koleksiyona eklenir.
local.settings.json dosyası, yerel geliştirme araçları tarafından kullanılan ayarları da depolar.
Projenizin Values dosyasındaki koleksiyondaki öğ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 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 Depolama hesabı kullanır. Geliştirme sırasında, bu iç hesap için geçerli bir Depolama hesabı veya Azurite öykünücüsü kullanabilirsiniz.
HTTP ve web kancaları dışındaki tüm tetikleyici türleri için Values.AzureWebJobsStorage dosyasında anahtarın değerini ayarlamanız gerekir:
- Depolama hesabı için değeri depolama hesabınızın bağlantı dizesi olarak ayarlayın.
- Öykünücü için değeri
UseDevelopmentStorage=trueolarak ayarlayın.
Öykünücüyü kullanıyorsanız, 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 aşağıdaki adımları izleyin:
Azure portalında oturum açın ve depolama hesabınıza gidin.
Güvenlik + ağ Erişim anahtarları'nı> seçin. anahtar1 altında Bağlantı Dizesi değerini kopyalayın.
Visual Studio projenizde local.settings.json dosyasını açın. Anahtarın
AzureWebJobsStoragedeğerini kopyaladığınız bağlantı dizesine ayarlayın.İşlevleriniz için gereken diğer bağlantılar için diziye
Valuesbenzersiz anahtarlar eklemek için önceki adımı yineleyin.
Projenize işlev ekleme
C# sınıf kitaplığı işlevlerinde, işlevlerin kullandığı bağlamalar koda öznitelikler uygulanarak tanımlanır. İşlev tetikleyicilerinizi sağlanan şablonlardan oluşturduğunuzda tetikleyici öznitelikleri sizin için uygulanır.
Çözüm Gezgini'da proje düğümünüzü sağ tıklatın ve Yeni Azure İşlevi.
Yeni Öğe Ekle iletişim kutusunda Azure İşlevi'ni ve ardından Ekle'yi seçin.
Bir tetikleyici seçin ve gerekli bağlama özelliklerini ayarlayın. Depolama hizmeti tetikleyicisini seçerseniz ve bağlantıyı yapılandırmak istiyorsanız, tetikleyici bağlantısını yapılandırma onay kutusunu seçin. Aşağıdaki örnekte Kuyruk Depolama tetikleyici işlevi oluşturma ayarları gösterilmektedir.
Add (Ekle) seçeneğini belirleyin. Önceki adımda depolama bağlantısı yapılandırma onay kutusunu seçerseniz, Bağımlılıklara bağlan sayfası görüntülenir. Bir Azurite depolama öykünücüsü veya Azure Depolama'yı seçin ve ardından İleri'yi seçin.
- Bir Azurite depolama öykünücüsü seçerseniz, Azurite depolama öykünücüsüne Bağlan sayfası görüntülenir. Aşağıdaki adımları uygulayın:
- sonrakiseçin.
- Değişikliklerin özeti sayfasında Son'u seçin. Visual Studio bağımlılığı yapılandırarak tetikleyici sınıfını oluşturur.
-
Azure Depolama'yı seçerseniz Azure Depolama'ya bağlan sayfası görüntülenir. Aşağıdaki adımları uygulayın:
- Bir depolama hesabı seçin ve ardından İleri'yi seçin. Visual Studio, Azure hesabınıza bağlanmaya ve bir uç nokta almaya çalışır.
- sonrakiseçin.
- Değişikliklerin özeti sayfasında Son'u seçin. Visual Studio bağımlılığı yapılandırarak tetikleyici sınıfını oluşturur.
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, ya Azurite öykünücüsüne ya da bir depolama hesabına başvurur.- Bir Azurite depolama öykünücüsü seçerseniz, Azurite depolama öykünücüsüne Bağlan sayfası görüntülenir. Aşağıdaki adımları uygulayın:
Yeni eklenen sınıfı inceleyin. Örneğin, aşağıdaki C# sınıfı temel bir Kuyruk Depolama tetikleyici işlevini temsil eder:
Bir
Run()yöntemiFunctionile ilişkilendirilmiş olarak kabul edilir. 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: {messageText}", message.MessageText); } }Statik
Run()yöntemiFunctionNameile ilişkilendirilir. 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.
Yukarıdaki kodda, ilk parametrenin QueueTrigger bir Kuyruk Depolama tetikleyicisi işlevini gösteren bir özniteliği uygulanmış. Kuyruk adı ve bağlantı dizesi ayar adı özniteliğine QueueTrigger parametre olarak geçirilir. Sınıfınızda:
- Kuyruk adı parametresi, tetikleyiciyi oluşturmak için önceki bir adımda kullandığınız kuyruğun adıyla eşleşmelidir, örneğin
myqueue-items. - Bağlantı dizesi ayarı adı, tetikleyiciyi oluşturmak için önceki bir adımda kullandığınız adla (gibi
QueueStorage) eşleşmelidir.
Daha fazla bilgi için bkz. Azure İşlevleri için Azure Kuyruk depolama tetikleyicisi.
İşlev uygulaması projenize daha fazla işlev eklemek için önceki 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ğlamaları.
Bağlama ekleme
Tetikleyicilerde olduğu gibi, giriş ve çıkış bağlamaları işlevinize bağlama öznitelikleri olarak eklenir. bir işleve bağlama eklemek için aşağıdaki adımları izleyin:
Projeyi yerel geliştirme için yapılandırdığınızdan emin olun.
Her bağlama için uygun NuGet uzantı paketini ekleyin. Bağlamaya özgü NuGet paketi gereksinimleri için bağlamanın başvuru makalesine bakın. Örneğin, Azure Event Hubs tetikleyicisinin paket gereksinimleri için bkz. Azure İşlevleri için Azure Event Hubs tetikleyicisi ve bağlamaları.
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 kodda,
<BINDING_TYPE>öğesini bağlama uzantısının belirli bir adıyla ve<TARGET_VERSION>öğesini4.0.0gibi paketin belirli bir sürümüyle değiştirin. Geçerli sürümler, NuGet.org'deki tek tek paket sayfalarında listelenir.Bağlamanın ihtiyaç duyduğu uygulama ayarları varsa, bunları
Valuesyerel 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.
Yöntem imzasına uygun bağlama özniteliğini ekleyin. Aşağıdaki kodda bir kuyruk iletisi,
Runişlevini tetikler. Çıkış bağlaması daha sonra 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; } }Queueparametresindekioutözniteliği çıkış bağlamasını tanımlar.Kuyruk Depolama Bağlantısı
QueueStorageayarından elde edilir. 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. Bu senaryonun daha eksiksiz bir örneği için bkz. Visual Studio kullanarak işlevleri Azure Depolama'ya bağlama.
İşlevleri yerel olarak çalıştırma
Yerel geliştirme bilgisayarınızda İşlevler projelerini çalıştırmak için Azure İşlevleri Temel Araçları'nı kullanabilirsiniz. İşlevler projesinde hata ayıklamak için F5'i seçtiğinizde, 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. Çekirdek Araçları kullanarak Azure İşlevlerini yerel olarak geliştirme. Visual Studio'dan ilk kez bir işlev başlattığınızda bu araçları yüklemeniz istenir.
Önemli
Core Tools'un 4.0.6517 sürümünden başlayarak, işlem içi model projelerinin 4.5.0 veya sonraki bir sürümüne başvurması Microsoft.NET.Sdk.Functionsgerekir. Önceki bir sürümü kullanıyorsanız, func start komut bir hata oluşturur.
İşlevinizi Visual Studio'da hata ayıklama modunda başlatmak için aşağıdaki adımları izleyin:
F5'i seçin. İstenirse Visual Studio'dan Azure İşlevleri Temel 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 açmanız gerekebilir.
Proje çalıştırıldığında, kodunuzu dağıtılan bir işlevi test ettiğiniz gibi test edin.
Visual Studio'yu hata ayıklama modunda çalıştırdığınızda kesme noktaları beklendiği gibi isabet alır.
Visual Studio kullanan daha ayrıntılı bir test senaryosu için bu makalenin devamında yer alan Test işlevleri bölümüne bakın.
Azure'a Yayımlama
İşlevler 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 Paket dosyasından ç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 İşlevler'e dağıtım yapmayın.
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.
Yayımla sayfasında aşağıdaki seçimleri yapın:
- Hedef'teAzure'ı ve ardından İleri'yi seçin.
- Belirli hedefteAzure İşlev Uygulaması'nı seçin ve ardından İleri'yi seçin.
- İşlevler örneğindeYeni oluştur'u 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 Adın yeni işlev uygulamanızı benzersiz bir şekilde tanımlaması gerekir. Önerilen adı kabul edin veya yeni bir ad girin. Şu karakterler geçerlidir: a-z,0-9ve-.Abonelik adı Aboneliğinizin adı İşlev uygulaması bir Azure aboneliğinde oluşturulur. Varsayılan aboneliği kabul edin veya listeden farklı bir abonelik seçin. Kaynak grubu Kaynak grubunuzun adı İşlev uygulaması bir kaynak grubunda oluşturulur. Yeni bir kaynak grubu oluşturmak için Yeni'yi seçin. Listeden var olan bir kaynak grubunu da seçebilirsiniz. Plan Türü Esnek Tüketim Projenizi Flex Consumption planında çalışan bir işlev uygulamasında yayımladığınızda, yalnızca işlev uygulamanızın yürütülmesi için ödemeniz gerekebilir. Diğer barındırma planları daha yüksek maliyetlere neden olabilir. ÖNEMLİ:
Esnek Tüketim planı oluştururken, iletişim kutusuyla ilgili bir sorunu gidermek için önce Uygulama hizmeti planı seçmeniz ve ardından Flex Tüketim'i yeniden seçmeniz gerekir.İşletim Sistemi Linux Flex Consumption planı şu anda Linux gerektirir. Konum App Service'in konumu Esnek Tüketim planı tarafından desteklenen bir Azure bölgesinde bir konum seçin. Desteklenmeyen bir bölge seçildiğinde Oluştur düğmesi gri görünür. Örnek bellek boyutu 2048 Uygulamanın çalıştırıldığı sanal makine örneklerinin bellek boyutu Esnek Tüketim planına özgüdür. Azure Depolama Genel amaçlı depolama hesabı İşlevler çalışma zamanı bir Depolama hesabı gerektirir. Genel amaçlı bir depolama hesabı yapılandırmak için Yeni'yi seçin. Depolama hesabı gereksinimlerini karşılayan mevcut bir hesabı da kullanabilirsiniz. Application Insights Application Insights örneği İşlev uygulamanız için Application Insights tümleştirmesini açmanız gerekir. Yeni bir örnekte veya mevcut log analytics çalışma alanında yeni bir örnek oluşturmak için Yeni'yi seçin. Var olan bir örneği de kullanabilirsiniz.
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öşesinde gösterilir.
Bitirseçin. Yayımlama profili oluşturma ilerleme durumu penceresi görüntülenir. Profil oluşturulduğunda Kapat'ı seçin.
Yayımla profili 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ığında, Azure'daki işlev uygulamasının kök URL'si yayımlama profili sayfasında gösterilir.
Yayımlama profili sayfasında Barındırma bölümüne gidin. Üç noktayı (...) seçin ve ardından Azure portalında aç seçeneğini seçin. Yeni işlev uygulaması Azure kaynağı Azure portalında açılır.
İşlev uygulaması ayarları
Projenizi yayımladığınızda Visual Studio uygulama ayarlarını otomatik olarak karşıya yüklemez. local.settings.json dosyasına ayarlar eklerseniz, bunları Azure'daki işlev uygulamasına da eklemeniz gerekir.
Gerekli ayarları Azure'daki işlev uygulamanıza yüklemenin en kolay yolu bunları Visual Studio'da yönetmektir. Yayımlama profili sayfasında Barındırma bölümüne gidin. İlk önce üç nokta simgesini (...) ve ardından Azure App Service ayarlarını yönet seçeneğini seçin.
Seçimi yaptığınızda, işlev uygulaması için Uygulama ayarları iletişim kutusu açılır. Uygulama ayarları eklemek veya mevcut ayarları değiştirmek için bu iletişim kutusunu kullanabilirsiniz.
Her ayar için Yerel değeri local.settings.json dosyasındaki değerdir ve Uzak değeri de Azure'daki işlev uygulamasındaki değerdir.
- Uygulama ayarı oluşturmak için Ayar ekle'yi seçin.
- Yerel alanından Uzak alanına bir ayar değeri kopyalamak için Yerel'den değer ekle'yi seçin.
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 denetlenmiyor. Sonuç olarak, kaynak denetiminden bir yerel İşlevler projesini klonlarsanız, projenin birlocal.settings.json dosyası yoktur. 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ını kullanın.
-
--publish-local-settingsAzure İşlevleri Temel 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ı da açmanız gerekir.
Bu bölümde, işlev uygulamanızda bir hata ayıklama yapılandırmasının yayımlandığı varsayılır.
Uzaktan hata ayıklamayla ilgili dikkat edilmesi gerekenler
- Bir üretim hizmetinde uzaktan hata ayıklama önerilmez.
- Uzaktan hata ayıklamayı kullanmak için işlev uygulamanızı bir Premium veya App Service planında barındırmanız gerekir.
- Uzaktan hata ayıklama şu anda yalnızca C# uygulamanızı Windows'da çalıştırırken desteklenir.
- Visual Studio'da Yalnızca Kodum özelliğini açtıysanız kapatın. Yönergeler için bkz . Yalnızca Benim Kodum'un etkinleştirilmesi veya devre dışı bırakılması.
- Uzaktan hata ayıklama kullanırken kesme noktalarında uzun duraklardan kaçının. Bir işlem birkaç dakikadan uzun süre durdurulduğunda, Azure bunu 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 . Fiyatlandırma hesaplayıcısı.
- İşlev uygulamanızda uzaktan hata ayıklama 48 saat sonra otomatik olarak kapatılır. Bu noktadan sonra, uzaktan hata ayıklamayı yeniden açmanız gerekir.
Hata ayıklayıcıyı ekleme
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. Diğer birkaç yapılandırma adımı da gereklidir.
İşlevler konağından ayrı bir işlemde çalışan bir işlev uygulamasına uzak hata ayıklayıcı eklemek için aşağıdaki adımları izleyin:
Yayımlama profili sayfasında Barındırma bölümüne gidin. Önce üç nokta'yı (...) seçin, ardından Hata ayıklayıcıyı bağla seçin.
Visual Studio, işlev uygulamanıza bağlanır ve önceden açık değilse uzaktan hata ayıklamayı açar.
Not
Uzak hata ayıklayıcı konak işlemine bağlanamadığından bir hata iletisi görüntülenebilir. Her durumda, yerel hata ayıklayıcı kesme noktalarınıza erişemez veya değişkenleri incelemeniz veya kodda adım adım ilerleyebilmeniz için bir yol sağlayamaz.
Visual Studio Hata Ayıklama menüsünde İşleme Ekle'yi seçin.
İşleme Ekle iletişim kutusunda aşağıdaki adımları izleyin:
- Bağlantı türü'nin yanında Microsoft Azure App Services'i seçin.
- Bağlantı hedefi yanında Bul seçin.
Azure İşleme Ekle iletişim kutusunda işlev uygulamanızı arayıp seçin ve ardından Tamam'ı seçin.
İstenirse, yerel güvenlik duvarınız üzerinden Visual Studio erişimine izin verin.
İşleme Ekle iletişim kutusuna geri dönüp Tüm kullanıcılar için işlemleri göster'i seçin. dotnet.exe'ı ve ardından Ekle'yi seçin.
İşlem tamamlandığında, yalıtılmış bir çalışan işleminde çalışan C# sınıf kitaplığı kodunuza bağlanırsınız. 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 aşağıdaki adımları izleyin.
Yayımlama profili sayfasında Barındırma bölümüne gidin. Önce üç nokta'yı (...) seçin, ardından Hata ayıklayıcıyı bağla seçin.
Visual Studio, işlev uygulamanıza bağlanır ve önceden açık değilse uzaktan hata ayıklamayı açar. 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.
Hata ayıklamayı bitirdiğinizde , uzaktan hata ayıklamayı kapatmanız gerekir.
Uzaktan hata ayıklamayı kapatma
Kodunuzun uzaktan hata ayıklamasını tamamladıktan sonra Azure portalında uzaktan hata ayıklamayı kapatmanız gerekir. Unutmanız durumunda uzaktan hata ayıklama 48 saat sonra otomatik olarak kapatılır.
Yayımlama profili sayfasında Barındırma bölümüne gidin. Üç noktayı (...) seçin ve ardından Azure portalında aç seçeneğini seçin. Azure portalı, projenizin dağıtılacağı işlev uygulamasında açılır.
İşlev uygulamasında Ayarlar>Yapılandırması'nı seçin ve genel ayarlar sekmesine gidin. Uzaktan hata ayıklama'nın yanında Kapalı'yı seçin. 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ı açmak için Azure portalında aynı sekmeyi kullanabilirsiniz.
Monitör işlevleri
İşlevlerinizi izlemenin önerilen yolu, işlev uygulamanızı Application Insights ile tümleştirmektir. Visual Studio yayımlama sırasında işlev uygulamanızı oluştururken bu tümleştirmeyi açmanız gerekir.
Yayımlama sırasında bir nedenden dolayı tümleştirme ayarlanmadıysa, Azure'daki işlev uygulamanız için Application Insights tümleştirmesini etkinleştirmeniz gerekir.
Application Insights'i izleme için kullanma hakkında daha fazla bilgi için detaylı bilgiye Azure İşlevleri'nde yürütmeleri izleme sayfasından ulaşabilirsiniz.
Test işlevleri
Bu bölümde, .NET için açık kaynak birim test aracı olan xUnit kullanarak test yapabileceğiniz bir C# işlem içi model projesinin nasıl oluşturulacağı açıklanmaktadır.
Adım 1: Kurulum
Testlerinizi desteklemek için gereken uygulama projesi ve işlevleri de dahil olmak üzere ortamı yapılandırmak için şu adımları izleyin:
Visual Studio'da İşlevler adlı bir Azure İşlevleri projesi oluşturun.
Şablondan bir HTTP işlevi oluşturun:
- Çözüm Gezgini'ndeİşlevler projesine sağ tıklayın ve ardındanYeni Azure İşlevi Ekle'yi> seçin.
- Yeni Öğe Ekle iletişim kutusunda Azure İşlevi'ni ve ardından Ekle'yi seçin.
- Http tetikleyicisi'ni ve ardından Ekle'yi seçin.
- Yeni MyHttpTrigger sınıfını yeniden adlandırın.
Şablondan bir zamanlayıcı işlevi oluşturun:
- Çözüm Gezgini'ndeİşlevler projesine sağ tıklayın ve ardındanYeni Azure İşlevi Ekle'yi> seçin.
- Yeni Öğe Ekle iletişim kutusunda Azure İşlevi'ni ve ardından Ekle'yi seçin.
- Zamanlayıcı tetikleyicisi'ne ve ardından Ekle'ye tıklayın.
- Yeni MyTimerTrigger sınıfını yeniden adlandırın.
Çözümde bir xUnit Test uygulaması oluşturun:
- Çözüm Gezgini'ndeİşlevler projenizi içeren çözüme sağ tıklayın ve ardındanYeni Proje Ekle'yi> seçin.
- xUnit Test Projesi şablonunu ve ardından İleri'yi seçin.
- Projeye Functions.Tests adını verin.
Functions.Tests projesinden varsayılan test dosyalarını kaldırın.
Test uygulamasından Microsoft.AspNetCore.Mvc'ye başvuru eklemek için NuGet kullanın. Paket Yöneticisi Konsolu'nu kullanabilir veya aşağıdaki adımları uygulayabilirsiniz:
- Çözüm Gezgini'ndeFunctions.Tests projesine sağ tıklayın ve ardından NuGet Paketlerini Yönet'i seçin.
- Microsoft.AspNetCore.Mvc'yi arayın ve yükleyin.
Functions.Tests uygulamasında Functions uygulamasına bir referans ekleyin:
- Çözüm Gezgini'ndeFunctions.Tests projesine sağ tıklayıpProje Başvurusu> seçin.
- İşlevler projesini ve ardından Tamam'ı seçin.
2. Adım: Test sınıfları oluşturma
Bu bölümde, otomatikleştirilmiş testleri çalıştırmak için kullandığınız sınıfları oluşturursunuz.
Her bir işlev, ileti günlüğünü işlemek için ILogger uygulamasını kabul eder. Bazı testlerde hiçbir ileti günlüğe kaydedilmez veya günlüğe kaydetmenin nasıl uygulandığı önemli değildir. Diğer testlerin, testin geçip geçmeyeceğini belirlemek için günlüğe kaydedilen iletileri değerlendirmesi gerekir.
Functions.Tests projenizde adlı
NullScopebir sınıf oluşturun ve aşağıdaki kodu ekleyin. Bu sınıf bir sahte kapsam sağlar. Sonraki bir adımda, bu kapsamı kullanan bir uygulamasıILoggeroluşturacaksınız.using System; namespace Functions.Tests { public class NullScope : IDisposable { public static NullScope Instance { get; } = new NullScope(); private NullScope() { } public void Dispose() { } } }Functions.Tests projenizde adlı
ListLoggerbir sınıf oluşturun ve aşağıdaki kodu ekleyin. Bu sınıf, test sırasında değerlendirilecek iletilerin iç listesini tutar. GerekliILoggerarabirimini uygulamak için sınıf,NullScopesınıfının sahte kapsamını kullanır. Test senaryoları, sahte kapsamıListLoggersınıfına geçirir.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); } } }ListLoggersınıfı,ILoggerarabirimince gereğince aşağıdaki üyeleri uygular:-
BeginScope: Kapsamlar, günlüklerinize bağlam ekler. Bu durumda, testin çalışmasını sağlamak içinNullScopesınıfındaki statik örneğe işaret eder. -
IsEnabled: bir varsayılan değer olarakfalsesağlanır. -
Log: Bu yöntem, iletiyi biçimlendirmek için sağlananformatterişlevi kullanır. Yöntemi daha sonra elde edilen metni koleksiyonaLogsekler.
Koleksiyon
Logsbir örneğidirList<string>ve oluşturucuda başlatılır.-
Functions.Tests projesinde LoggerTypes.cs adlı bir kod dosyası oluşturun ve aşağıdaki kodu ekleyin:
namespace Functions.Tests { public enum LoggerTypes { Null, List } }Bu numaralandırma, testlerin kullandığı günlükçü türünü belirtir.
Functions.Tests projesinde adlı
TestFactorybir sınıf oluşturun ve aşağıdaki 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", "Bernardo" }, new object[] { "name", "Ananya" }, new object[] { "name", "Vlad" } }; } 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; } } }TestFactorysınıfı aşağıdaki üyeleri uygular:-
Data: 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. Yeni birDictionaryörneği döndürür, bu daQueryCollection'in bir örneğini oluşturmak ve sorgu dizesi değerlerini temsil etmek için kullanılır. -
CreateHttpRequest: Bu yöntem, verilen sorgu dizesi parametreleriyle başlatılan bir HTTP isteği oluşturur. -
CreateLogger: Bu yöntem, test için kullanılan birILoggerimplementasyonu döndürür. UygulamaILogger, belirtilen günlükçü türüne bağlıdır. Bir liste türü belirtilirse,ListLoggerörneği, testlerde değerlendirilebilir durumda olan günlüğe kaydedilen iletileri izler.
-
Functions.Tests projesinde adlı
FunctionsTestsbir sınıf oluşturun ve aşağıdaki 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", "Bernardo"); var response = (OkObjectResult)await MyHttpTrigger.Run(request, logger); Assert.Equal("Hello, Bernardo. 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ıf aşağıdaki üyeleri uygular:
-
Http_trigger_should_return_known_string: Bu test, http işlevine istek oluşturmak için sorgu dizesi değerininame=Bernardokullanır. Bu test, 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,ListLoggerbir örnek oluşturur ve bunu bir zamanlayıcı işlevine aktarır. İşlev çalıştıktan sonra, beklenen iletinin mevcut olup olmadığını kontrol etmek için günlük denetlenir.
-
Testlerinizdeki uygulama ayarlarına erişmek için işlevinize sahte ortam değişkeni değerleri içeren bir uygulama
IConfiguration.
3. Adım: Testleri çalıştırma
Testleri Visual Studio'da çalıştırmak içinTest Gezginini> seçin. Test Gezgini'ndeTüm Testleri Görünümde Çalıştır'ı> seçin.
4. Adım: Testlerde hata ayıklama
Testlerde hata ayıklamak için testte bir kesme noktası ayarlayın. Test Gezgini'ndeÇalıştır> ve ardından Son Çalıştırmayı Hata Ayıkla seçin.