Azure İşlevleri C# betiği (.csx) geliştirici başvurusu
Bu makale, C# betiği (.csx) kullanarak Azure İşlevleri geliştirmeye giriş niteliğindedir.
Önemli
C# betiği öncelikle C# işlevlerini oluşturmaya ve çalıştırmaya hızlı bir şekilde başlamanıza yardımcı olacak kullanışlı bir portal içi deneyim sağlamak için desteklenir. Üretim kalitesinde uygulamalar için bunun yerine C# işlevlerinizi derlenmiş bir C# sınıf kitaplığı projesi olarak yerel olarak geliştirmeniz gerekir. C# betik projesini C# sınıf kitaplığı (yalıtılmış çalışan) projesine geçirmeyi öğrenmek için bkz . C# betik uygulamasını C# projesine dönüştürme.
Azure İşlevleri, aşağıdaki yollardan biriyle C# kullanarak işlevler geliştirmenizi sağlar:
Tür | Yürütme işlemi | Kod uzantısı | Geliştirme ortamı | Başvuru |
---|---|---|---|---|
C# betiği | işlem halinde | .csx | Portal Temel Araçlar |
Bu makale |
C# sınıf kitaplığı (yalıtılmış çalışan) | yalıtılmış çalışan işlemi | .cs | Visual Studio Visual Studio Code Temel Araçlar |
.NET yalıtılmış çalışan işlemi işlevleri |
C# sınıf kitaplığı (işlem içi) | işlem halinde | .cs | Visual Studio Visual Studio Code Temel Araçlar |
İşlem içi C# sınıf kitaplığı işlevleri |
.csx nasıl çalışır?
Veri, yöntem bağımsız değişkenleri aracılığıyla C# işlevinize akar. Bağımsız değişken adları bir function.json
dosyada belirtilir ve işlev günlükçü ve iptal belirteçleri gibi öğelere erişmek için önceden tanımlanmış adlar vardır.
.csx biçimi daha az "ortak" yazmanızı ve yalnızca bir C# işlevi yazmaya odaklanmanızı sağlar. Her şeyi bir ad alanı ve sınıf içinde sarmalamak yerine bir Run
yöntem tanımlamanız gerekir. Her zamanki gibi dosyanın başına tüm derleme başvurularını ve ad alanlarını ekleyin.
Bir işlev uygulamasının .csx dosyaları, bir örnek başlatıldığında derlenir. Bu derleme adımı, C# sınıf kitaplıklarına kıyasla C# betik işlevleri için soğuk başlangıç gibi şeylerin daha uzun sürebileceği anlamına gelir. Bu derleme adımı ayrıca C# betik işlevlerinin Azure portalında düzenlenebilir olmasının nedenidir ancak C# sınıf kitaplıkları düzenlenemez.
Klasör yapısı
C# betik projesinin klasör yapısı aşağıdaki örneğe benzer:
FunctionsProject
| - MyFirstFunction
| | - run.csx
| | - function.json
| | - function.proj
| - MySecondFunction
| | - run.csx
| | - function.json
| | - function.proj
| - host.json
| - extensions.csproj
| - bin
İşlev uygulamasını yapılandırmak için kullanılabilecek paylaşılan bir host.json dosyası vardır. Her işlevin kendi kod dosyası (.csx) ve bağlama yapılandırma dosyası (function.json) vardır.
İşlevler çalışma zamanının 2.x ve sonraki sürümlerinde gerekli bağlama uzantıları, klasöründeki gerçek kitaplık dosyalarıyla birlikte dosyada bin
tanımlanırextensions.csproj
. Yerel olarak geliştirirken bağlama uzantılarını kaydetmeniz gerekir. Azure portalında işlevler geliştirirken bu kayıt sizin için yapılır.
Bağımsız değişkenlere bağlama
Giriş veya çıkış verileri, function.json yapılandırma dosyasındaki name
özelliği aracılığıyla bir C# betik işlevi parametresine bağlıdır. Aşağıdaki örnekte kuyrukla tetiklenen bir işlev için function.json dosyası ve run.csx dosyası gösterilmektedir. Özelliğin değeri olduğundan, kuyruk iletisinden veri alan parametrenin name
adı myQueueItem
verilmiştir.
{
"disabled": false,
"bindings": [
{
"type": "queueTrigger",
"direction": "in",
"name": "myQueueItem",
"queueName": "myqueue-items",
"connection":"MyStorageConnectionAppSetting"
}
]
}
#r "Microsoft.WindowsAzure.Storage"
using Microsoft.Extensions.Logging;
using Microsoft.WindowsAzure.Storage.Queue;
using System;
public static void Run(CloudQueueMessage myQueueItem, ILogger log)
{
log.LogInformation($"C# Queue trigger function processed: {myQueueItem.AsString}");
}
Açıklama#r
, bu makalenin ilerleyen bölümlerinde açıklanmıştır.
Bağlamalar için desteklenen türler
Her bağlamanın kendi desteklenen türleri vardır; örneğin, bir blob tetikleyicisi dize parametresi, POCO parametresi, CloudBlockBlob
parametre veya desteklenen diğer çeşitli türlerden herhangi biriyle kullanılabilir. Blob bağlamaları için bağlama başvuru makalesi, blob tetikleyicileri için desteklenen tüm parametre türlerini listeler. Daha fazla bilgi için bkz . Tetikleyiciler ve bağlamalar ve her bağlama türü için bağlama başvuru belgeleri.
İpucu
HTTP veya Web Kancası bağlamalarını kullanmayı planlıyorsanız, yanlış örnek oluşturmanın neden olabileceği bağlantı noktası tükenmesini önlemeyi planlayın HttpClient
. Daha fazla bilgi için bkz. Azure İşlevleri'da bağlantıları yönetme.
Özel sınıflara başvurma
Özel bir Düz Eski CLR Nesnesi (POCO) sınıfı kullanmanız gerekiyorsa, sınıf tanımını aynı dosyanın içine ekleyebilir veya ayrı bir dosyaya yerleştirebilirsiniz.
Aşağıdaki örnekte POCO sınıf tanımı içeren bir run.csx örneği gösterilmektedir.
public static void Run(string myBlob, out MyClass myQueueItem)
{
log.Verbose($"C# Blob trigger function processed: {myBlob}");
myQueueItem = new MyClass() { Id = "myid" };
}
public class MyClass
{
public string Id { get; set; }
}
POCO sınıfı, her özellik için tanımlanmış bir getter ve ayarlayıcıya sahip olmalıdır.
.csx kodunu yeniden kullanıyor
Run.csx dosyanızdaki diğer .csx dosyalarında tanımlanan sınıfları ve yöntemleri kullanabilirsiniz. Bunu yapmak için run.csx dosyanızdaki yönergeleri kullanın#load
. Aşağıdaki örnekte adlı MyLogger
günlük yordamı myLogger.csx dosyasında paylaşılır ve yönergesi #load
kullanılarak run.csx dosyasına yüklenir:
Örnek run.csx:
#load "mylogger.csx"
using Microsoft.Extensions.Logging;
public static void Run(TimerInfo myTimer, ILogger log)
{
log.LogInformation($"Log by run.csx: {DateTime.Now}");
MyLogger(log, $"Log by MyLogger: {DateTime.Now}");
}
Örnek mylogger.csx:
public static void MyLogger(ILogger log, string logtext)
{
log.LogInformation(logtext);
}
PoCO nesnesi kullanarak işlevler arasında geçirilen verileri güçlü bir şekilde yazmak istediğinizde paylaşılan bir .csx dosyası kullanmak yaygın bir desendir. Aşağıdaki basitleştirilmiş örnekte, http tetikleyicisi ve kuyruk tetikleyicisi, sipariş verilerini kesin olarak yazmak için adlı Order
bir POCO nesnesini paylaşır:
HTTP tetikleyicisi için örnek run.csx:
#load "..\shared\order.csx"
using System.Net;
using Microsoft.Extensions.Logging;
public static async Task<HttpResponseMessage> Run(Order req, IAsyncCollector<Order> outputQueueItem, ILogger log)
{
log.LogInformation("C# HTTP trigger function received an order.");
log.LogInformation(req.ToString());
log.LogInformation("Submitting to processing queue.");
if (req.orderId == null)
{
return new HttpResponseMessage(HttpStatusCode.BadRequest);
}
else
{
await outputQueueItem.AddAsync(req);
return new HttpResponseMessage(HttpStatusCode.OK);
}
}
Kuyruk tetikleyicisi için örnek run.csx :
#load "..\shared\order.csx"
using System;
using Microsoft.Extensions.Logging;
public static void Run(Order myQueueItem, out Order outputQueueItem, ILogger log)
{
log.LogInformation($"C# Queue trigger function processed order...");
log.LogInformation(myQueueItem.ToString());
outputQueueItem = myQueueItem;
}
Örnek order.csx:
public class Order
{
public string orderId {get; set; }
public string custName {get; set;}
public string custAddress {get; set;}
public string custEmail {get; set;}
public string cartId {get; set; }
public override String ToString()
{
return "\n{\n\torderId : " + orderId +
"\n\tcustName : " + custName +
"\n\tcustAddress : " + custAddress +
"\n\tcustEmail : " + custEmail +
"\n\tcartId : " + cartId + "\n}";
}
}
Yönergesi ile #load
göreli bir yol kullanabilirsiniz:
#load "mylogger.csx"
işlev klasöründe bulunan bir dosyayı yükler.#load "loadedfiles\mylogger.csx"
işlev klasöründeki bir klasörde bulunan bir dosyayı yükler.#load "..\shared\mylogger.csx"
, işlev klasörüyle aynı düzeydeki bir klasörde bulunan bir dosyayı, yani doğrudan wwwroot altında yükler.
yönergesi#load
, .cs dosyalarıyla değil yalnızca .csx dosyalarıyla çalışır.
Yöntem dönüş değerine bağlama
function.json adını $return
kullanarak bir çıkış bağlaması için yöntem dönüş değeri kullanabilirsiniz.
{
"name": "$return",
"type": "blob",
"direction": "out",
"path": "output-container/{id}"
}
Dönüş değerini kullanan C# betik kodu aşağıda verilmiştir ve ardından zaman uyumsuz bir örnek verilmiştir:
public static string Run(WorkItem input, ILogger log)
{
string json = string.Format("{{ \"id\": \"{0}\" }}", input.Id);
log.LogInformation($"C# script processed queue message. Item={json}");
return json;
}
public static Task<string> Run(WorkItem input, ILogger log)
{
string json = string.Format("{{ \"id\": \"{0}\" }}", input.Id);
log.LogInformation($"C# script processed queue message. Item={json}");
return Task.FromResult(json);
}
Dönüş değerini yalnızca başarılı bir işlev yürütmesi her zaman çıkış bağlamasına geçirmek için bir dönüş değeriyle sonuçlanırsa kullanın. Aksi takdirde, aşağıdaki bölümde gösterildiği gibi veya IAsyncCollector
kullanınICollector
.
Birden çok çıkış değeri yazma
Çıkış bağlamasına birden çok değer yazmak için veya başarılı bir işlev çağrısı çıktı bağlamasına herhangi bir şey geçirilmediyse veya IAsyncCollector
türlerini kullanınICollector
. Bu türler, yöntem tamamlandığında çıkış bağlamasına yazılan salt yazma koleksiyonlarıdır.
Bu örnek kullanarak ICollector
aynı kuyruğa birden çok kuyruk iletisi yazar:
public static void Run(ICollector<string> myQueue, ILogger log)
{
myQueue.Add("Hello");
myQueue.Add("World!");
}
Günlük Kaydı
Çıktıyı C# dilinde akış günlüklerinize kaydetmek için ILogger türünde bir bağımsız değişken ekleyin. adını kullanmanızı log
öneririz. Azure İşlevleri kullanmaktan Console.Write
kaçının.
public static void Run(string myBlob, ILogger log)
{
log.LogInformation($"C# Blob trigger function processed: {myBlob}");
}
Not
yerine TraceWriter
kullanabileceğiniz daha yeni bir günlük çerçevesi hakkında bilgi için .NET sınıf kitaplığı geliştirici kılavuzundaki ILogger belgelerine bakın.
Özel ölçüm günlüğü
Application Insights'ta LogMetric
özel ölçümler oluşturmak için uzantısı ILogger
yöntemini kullanabilirsiniz. Aşağıda örnek bir yöntem çağrısı verilmişti:
logger.LogMetric("TestMetric", 1234);
Bu kod, .NET için Application Insights API'sini kullanarak çağırmaya TrackMetric
alternatiftir.
Zaman Uyumsuz
bir işlevi zaman uyumsuz hale getirmek için anahtar sözcüğünü async
kullanın ve bir Task
nesne döndürin.
public async static Task ProcessQueueMessageAsync(
string blobName,
Stream blobInput,
Stream blobOutput)
{
await blobInput.CopyToAsync(blobOutput, 4096);
}
Zaman uyumsuz işlevlerde parametreleri kullanamazsınız out
. Çıkış bağlamaları için bunun yerine işlev dönüş değerini veya toplayıcı nesnesini kullanın.
İptal belirteçleri
İşlev bir CancellationToken parametresini kabul edebilir ve bu parametre, işletim sisteminin işlev sonlandırılacakken kodunuzu bildirmesini sağlar. İşlevin verileri tutarsız bir durumda bırakabilecek şekilde beklenmedik şekilde sonlandırılmadığından emin olmak için bu bildirimi kullanabilirsiniz.
Aşağıdaki örnekte, yaklaşan işlev sonlandırmanın nasıl denetlenmesi gösterilmektedir.
using System;
using System.IO;
using System.Threading;
public static void Run(
string inputText,
TextWriter logger,
CancellationToken token)
{
for (int i = 0; i < 100; i++)
{
if (token.IsCancellationRequested)
{
logger.WriteLine("Function was cancelled at iteration {0}", i);
break;
}
Thread.Sleep(5000);
logger.WriteLine("Normal processing for queue message={0}", inputText);
}
}
Ad alanlarını içeri aktarma
Ad alanlarını içeri aktarmanız gerekiyorsa, bunu yan tümcesiyle using
her zamanki gibi yapabilirsiniz.
using System.Net;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
public static Task<HttpResponseMessage> Run(HttpRequestMessage req, ILogger log)
Aşağıdaki ad alanları otomatik olarak içeri aktarılır ve bu nedenle isteğe bağlıdır:
System
System.Collections.Generic
System.IO
System.Linq
System.Net.Http
System.Threading.Tasks
Microsoft.Azure.WebJobs
Microsoft.Azure.WebJobs.Host
Dış derlemelere başvurma
Çerçeve derlemeleri için yönergesini #r "AssemblyName"
kullanarak başvurular ekleyin.
#r "System.Web.Http"
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
public static Task<HttpResponseMessage> Run(HttpRequestMessage req, ILogger log)
Aşağıdaki derlemeler Azure İşlevleri barındırma ortamı tarafından otomatik olarak eklenir:
mscorlib
System
System.Core
System.Xml
System.Net.Http
Microsoft.Azure.WebJobs
Microsoft.Azure.WebJobs.Host
Microsoft.Azure.WebJobs.Extensions
System.Web.Http
System.Net.Http.Formatting
Aşağıdaki derlemelere çalışma zamanı sürümüne göre basit adla başvurulabilir:
Newtonsoft.Json
Microsoft.WindowsAzure.Storage
*
*Çalışma zamanının 4.x sürümünde kaldırıldı.
Kodda derlemelere aşağıdaki örnekte olduğu gibi başvurulur:
#r "AssemblyName"
Özel derlemelere başvurma
Özel bir derlemeye başvurmak için paylaşılan derleme veya özel derleme kullanabilirsiniz:
Paylaşılan derlemeler, bir işlev uygulamasındaki tüm işlevler arasında paylaşılır. Özel bir derlemeye başvurmak için, derlemeyi işlev uygulamanızın kök klasöründe (wwwroot) adlı
bin
bir klasöre yükleyin.Özel derlemeler belirli bir işlevin bağlamının bir parçasıdır ve farklı sürümlerin dışarıdan yüklenmesini destekler. Özel derlemeler işlev dizinindeki bir
bin
klasöre yüklenmelidir. Gibi#r "MyAssembly.dll"
dosya adını kullanarak derlemelere başvurun.
İşlev klasörünüze dosya yükleme hakkında bilgi için paket yönetimi bölümüne bakın.
İzlenen dizinler
İşlev betiği dosyasını içeren dizin, derlemelerde yapılan değişiklikler için otomatik olarak izleniyor. Diğer dizinlerdeki derleme değişikliklerini izlemek için bunları watchDirectories
host.json'daki listeye ekleyin.
NuGet paketlerini kullanma
İşlev uygulamanıza hem bağlama uzantısı paketlerinin hem de diğer NuGet paketlerinin eklenmesi, İşlevler çalışma zamanının hedeflenen sürümüne bağlıdır.
Varsayılan olarak, desteklenen İşlevler uzantısı NuGet paketleri kümesi, uzantı paketleri kullanılarak C# betik işlev uygulamanızın kullanımına sunulur. Daha fazla bilgi için bkz . Uzantı paketleri.
Bir nedenle projenizde uzantı paketlerini kullanamıyorsanız, uygulamanızdaki function.json dosyalarında tanımlanan bağlamaları temel alan uzantıları yüklemek için Azure İşlevleri Core Tools'u da kullanabilirsiniz. Uzantıları kaydetmek için Core Tools kullanırken seçeneğini kullandığınızdan --csx
emin olun. Daha fazla bilgi edinmek için bkz . func uzantıları yükleme.
Varsayılan olarak, Core Tools function.json dosyalarını okur ve gerekli paketleri işlev uygulamasının dosya sisteminin (wwwroot) kökündeki extensions.csproj C# sınıf kitaplığı proje dosyasına ekler. Çekirdek Araçlar dotnet.exe kullandığından, bu uzantılar dosyasına herhangi bir NuGet paket başvurusu eklemek için bunu kullanabilirsiniz. Yükleme sırasında Core Tools, gerekli kitaplıkları yüklemek için extensions.csproj'u oluşturur. Microsoft.ProjectOxford.Face sürüm 1.1.0'a başvuru ekleyen örnek bir extensions.csproj dosyası aşağıda verilmiştir:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.ProjectOxford.Face" Version="1.1.0" />
</ItemGroup>
</Project>
Not
C# betiği (.csx) için değerine netstandard2.0
ayarlamanız TargetFramework
gerekir. gibi net6.0
diğer hedef çerçeveler desteklenmez.
Özel bir NuGet akışı kullanmak için akışı işlev uygulaması kök klasöründeki bir Nuget.Config dosyasında belirtin. Daha fazla bilgi için bkz . NuGet davranışını yapılandırma.
Projeniz üzerinde yalnızca portalda çalışıyorsanız extensions.csproj dosyasını veya nuget.Config dosyasını doğrudan sitede el ile oluşturmanız gerekir. Daha fazla bilgi edinmek için bkz . Uzantıları el ile yükleme.
Ortam değişkenleri
Ortam değişkeni veya uygulama ayarı değeri almak için, aşağıdaki kod örneğinde gösterildiği gibi kullanın System.Environment.GetEnvironmentVariable
:
public static void Run(TimerInfo myTimer, ILogger log)
{
log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
log.LogInformation(GetEnvironmentVariable("AzureWebJobsStorage"));
log.LogInformation(GetEnvironmentVariable("WEBSITE_SITE_NAME"));
}
public static string GetEnvironmentVariable(string name)
{
return name + ": " +
System.Environment.GetEnvironmentVariable(name, EnvironmentVariableTarget.Process);
}
İlkeleri yeniden deneme
İşlevler iki yerleşik yeniden deneme ilkesi destekler. Daha fazla bilgi için bkz . İlkeleri yeniden deneme.
function.json dosyasında yeniden deneme ilkesi aşağıdadır:
{
"disabled": false,
"bindings": [
{
....
}
],
"retry": {
"strategy": "fixedDelay",
"maxRetryCount": 4,
"delayInterval": "00:00:10"
}
}
function.json özelliği | Açıklama |
---|---|
strateji | fixedDelay adresini kullanın. |
maxRetryCount | Gerekli. İşlev yürütme başına izin verilen en fazla yeniden deneme sayısı. -1 süresiz olarak yeniden deneme anlamına gelir. |
delayInterval | Yeniden denemeler arasında kullanılan gecikme. biçiminde HH:mm:ss bir dize olarak belirtin. |
Çalışma zamanında bağlama
C# ve diğer .NET dillerinde, function.json bildirim temelli bağlamaların aksine kesinlik temelli bağlama deseni kullanabilirsiniz. Kesinlik temelli bağlama, bağlama parametrelerinin tasarım zamanından ziyade çalışma zamanında hesaplanması gerektiğinde yararlıdır. Bu desenle, işlev kodunuzda desteklenen giriş ve çıkış bağlamalarını anında bağlayabilirsiniz.
Kesinlik temelli bağlamayı aşağıdaki gibi tanımlayın:
- İstediğiniz kesinlik temelli bağlamalar için function.json bir girdi eklemeyin.
- Bir giriş parametresi
Binder binder
veyaIBinder binder
geçirin. - Veri bağlamayı gerçekleştirmek için aşağıdaki C# desenini kullanın.
using (var output = await binder.BindAsync<T>(new BindingTypeAttribute(...)))
{
...
}
BindingTypeAttribute
bağlamanızı tanımlayan .NET özniteliğidir ve T
bu bağlama türü tarafından desteklenen bir giriş veya çıkış türüdür. T
bir out
parametre türü (örneğin out JObject
) olamaz. Örneğin, Mobile Apps tablosu çıkış bağlaması altı çıkış türünü destekler, ancak yalnızca ICollector<T> veya IAsyncCollector<T>
için T
kullanabilirsiniz.
Tek öznitelik örneği
Aşağıdaki örnek kod, çalışma zamanında tanımlanan blob yolu ile bir Depolama blobu çıkış bağlaması oluşturur ve ardından bloba bir dize yazar.
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host.Bindings.Runtime;
public static async Task Run(string input, Binder binder)
{
using (var writer = await binder.BindAsync<TextWriter>(new BlobAttribute("samples-output/path")))
{
writer.Write("Hello World!!");
}
}
BlobAttribute, Depolama blobu giriş veya çıkış bağlamasını tanımlar ve TextWriter desteklenen bir çıkış bağlama türüdür.
Birden çok öznitelik örneği
Yukarıdaki örnek, işlev uygulamasının ana Depolama hesabı bağlantı dizesi (yaniAzureWebJobsStorage
) için uygulama ayarını alır. StorageAccountAttribute öğesini ekleyerek ve öznitelik dizisini içine BindAsync<T>()
geçirerek Depolama hesabı için kullanılacak özel bir uygulama ayarı belirtebilirsiniz. Binder
parametresini değilIBinder
, parametresini kullanın. Örneğin:
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host.Bindings.Runtime;
public static async Task Run(string input, Binder binder)
{
var attributes = new Attribute[]
{
new BlobAttribute("samples-output/path"),
new StorageAccountAttribute("MyStorageAccount")
};
using (var writer = await binder.BindAsync<TextWriter>(attributes))
{
writer.Write("Hello World!");
}
}
Aşağıdaki tabloda her bağlama türü için .NET öznitelikleri ve tanımlandığı paketler listelanmaktadır.
C# betik uygulamasını C# projesine dönüştürme
C# betik işlev uygulamasını derlenmiş bir C# sınıf kitaplığı projesine dönüştürmenin en kolay yolu yeni bir projeyle başlamaktır. Ardından, her işlev için kodu ve yapılandırmayı her run.csx dosyasından ve bir işlev klasöründeki function.json dosyasından tek bir yeni .cs sınıf kitaplığı kod dosyasına geçirebilirsiniz. Örneğin, adlı HelloWorld
bir C# betik işlevine sahip olduğunuzda iki dosyanız olur: HelloWorld/run.csx
ve HelloWorld/function.json
. Bu işlev için, yeni sınıf kitaplığı projenizde adlı HelloWorld.cs
bir kod dosyası oluşturursunuz.
Portal düzenleme için C# betiği kullanıyorsanız, uygulama içeriğini yerel makinenize indirebilirsiniz. İçerik ve Visual Studio projesi yerine Site içeriği seçeneğini belirleyin. Proje oluşturmanız gerekmez ve indirmeye uygulama ayarlarını eklemeyin. Yeni bir geliştirme ortamı tanımlıyorsunuz ve bu ortamın barındırılan uygulama ortamınızla aynı izinlere sahip olmaması gerekir.
Bu yönergelerde, C# betik işlevlerinin (İşlevler konağıyla işlem içinde çalışan) yalıtılmış bir çalışan işleminde çalışan C# sınıf kitaplığı işlevlerine nasıl dönüştürüldüğü gösterilir.
tercih ettiğiniz hızlı başlangıçtan İşlev uygulaması projesi oluşturma bölümünü tamamlayın:
Özgün C# betik kodunuz bir dosya veya herhangi bir
function.proj
extensions.csproj
dosya içeriyorsa, bu dosyadaki paket başvurularını kopyalayın ve İşlevler temel bağımlılıklarıyla aynıItemGroup
şekilde yeni projenin.csproj
dosyasına ekleyin.İpucu
Dönüştürme, bağımlılıklarınızın en son sürümlerine güncelleştirmek için iyi bir fırsat sağlar. Bunu yapmak için sonraki bir adımda ek kod değişiklikleri gerekebilir.
Bölümü dışında
extensionBundles
özgünhost.json
dosyanın içeriğini yeni projeninhost.json
dosyasına kopyalayın (derlenmiş C# projeleri uzantı paketlerini kullanmaz ve işlevleriniz tarafından kullanılan tüm uzantılara açıkça başvuru eklemeniz gerekir). host.json dosyaları birleştirirken, çoğu uygulama sürüm 2.0 kullanarak şemanınhost.json
sürümlendiğini unutmayın. bölümünextensions
içeriği, işlevleriniz tarafından kullanılan bağlama uzantılarının belirli sürümlerine göre farklılık gösterebilir. Belirli sürümleriniz için host.json doğru şekilde yapılandırmayı öğrenmek için tek tek uzantı başvuru makalelerine bakın.Yönerge tarafından
#load
başvurulan tüm paylaşılan dosyalar için, bu paylaşılan başvuruların her biri için yeni.cs
bir dosya oluşturun. Paylaşılan her sınıf tanımı için yeni.cs
bir dosya oluşturmak en basit işlemdir. Sınıfı olmayan statik yöntemler varsa, bu yöntemler için yeni sınıflar tanımlamanız gerekir.Özgün projenizdeki her
<FUNCTION_NAME>
klasör için aşağıdaki görevleri gerçekleştirin:adlı
<FUNCTION_NAME>.cs
yeni bir dosya oluşturun ve yerine<FUNCTION_NAME>
C# betik işlevinizi tanımlayan klasörün adını yazın. Tetikleyiciye özgü şablonlardan birinden aşağıdaki şekilde yeni bir işlev kodu dosyası oluşturabilirsiniz:func new --name <FUNCTION_NAME>
komutunu kullanarak ve isteminde doğru tetikleyici şablonunu seçerek.using
Dosyanızdakirun.csx
deyimleri kopyalayın ve yeni dosyaya ekleyin. Herhangi bir#r
yönergeye ihtiyacınız yoktur.Dosyanızdaki
run.csx
herhangi bir#load
deyim için, paylaşılan kod için kullandığınız ad alanı için yeniusing
bir deyim ekleyin.Yeni dosyada, proje için kullandığınız ad alanı altında işleviniz için bir sınıf tanımlayın.
veya benzeri adlı
RunHandler
yeni bir yöntem oluşturun. Bu yeni yöntem işlevi için yeni giriş noktası görevi görür.İşlevinizi temsil eden statik yöntemi çağıran
run.csx
işlevlerle birlikte yeni sınıfınıza ikinci bir yöntem olarak kopyalayın. Önceki adımda oluşturduğunuz yeni yöntemden bu statik yöntemi çağırın. Bu dolaylı adım, yükseltmeye devam ettikçe farklarda gezinmek için yararlıdır. Özgün yöntemi tam olarak aynı tutabilir ve yalnızca girişlerini yeni bağlamdan denetleyebilirsiniz. Daha sonra statik yöntem çağrısına geçirdiğiniz yeni yöntemde parametreler oluşturmanız gerekebilir. Geçişin amaçlandığı gibi çalıştığını onayladıktan sonra, bu ek dolaylılık düzeyini kaldırabilirsiniz.Dosyadaki
function.json
her bağlama için ilgili özniteliği yeni yönteminize ekleyin. Bağlama örneklerini hızla bulmak için bkz . Örneklere göre bağlamaları el ile ekleme.Henüz yapmadıysanız bağlamaların gerektirdiği uzantı paketlerini projenize ekleyin.
uygulamanızın gerektirdiği tüm uygulama ayarlarını local.settings.json dosyasının koleksiyonunda
Values
yeniden oluşturun.Projenizin yerel olarak çalıştığını doğrulayın:
Uygulamanızı komut satırından çalıştırmak için kullanın
func start
. Daha fazla bilgi için bkz . İşlevleri yerel olarak çalıştırma.Projenizi Azure'da yeni bir işlev uygulamasında yayımlama:
Komutunu kullanarak Azure kaynaklarınızı oluşturun ve kod projesini Azure'a dağıtın
func azure functionapp publish <APP_NAME>
. Daha fazla bilgi için bkz . Proje dosyalarını dağıtma.
Örnek işlev dönüştürme
Bu bölümde tek bir işlev için geçiş örneği gösterilmektedir.
C# betiğindeki özgün işlevin iki dosyası vardır:
HelloWorld/function.json
HelloWorld/run.csx
İçeriği HelloWorld/function.json
şunlardır:
{
"bindings": [
{
"authLevel": "FUNCTION",
"name": "req",
"type": "httpTrigger",
"direction": "in",
"methods": [
"get",
"post"
]
},
{
"name": "$return",
"type": "http",
"direction": "out"
}
]
}
İçeriği HelloWorld/run.csx
şunlardır:
#r "Newtonsoft.Json"
using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
public static async Task<IActionResult> Run(HttpRequest req, ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
string name = req.Query["name"];
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
dynamic data = JsonConvert.DeserializeObject(requestBody);
name = name ?? data?.name;
string responseMessage = string.IsNullOrEmpty(name)
? "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response."
: $"Hello, {name}. This HTTP triggered function executed successfully.";
return new OkObjectResult(responseMessage);
}
ASP.NET Core tümleştirmesi ile yalıtılmış çalışan modeline geçirildikten sonra bunlar tek HelloWorld.cs
bir ile değiştirilir:
using System.Net;
using Microsoft.Azure.Functions.Worker;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Microsoft.AspNetCore.Routing;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
namespace MyFunctionApp
{
public class HelloWorld
{
private readonly ILogger _logger;
public HelloWorld(ILoggerFactory loggerFactory)
{
_logger = loggerFactory.CreateLogger<HelloWorld>();
}
[Function("HelloWorld")]
public async Task<IActionResult> RunHandler([HttpTrigger(AuthorizationLevel.Function, "get")] HttpRequest req)
{
return await Run(req, _logger);
}
// From run.csx
public static async Task<IActionResult> Run(HttpRequest req, ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
string name = req.Query["name"];
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
dynamic data = JsonConvert.DeserializeObject(requestBody);
name = name ?? data?.name;
string responseMessage = string.IsNullOrEmpty(name)
? "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response."
: $"Hello, {name}. This HTTP triggered function executed successfully.";
return new OkObjectResult(responseMessage);
}
}
}
Yapılandırmayı ve örnekleri bağlama
Bu bölüm, C# betiğinde tetikleyicileri ve bağlamaları tanımlamaya yönelik başvurular ve örnekler içerir.
Blob tetikleyicisi
Aşağıdaki tabloda, function.json dosyasında ayarladığınız C# betiğinin bağlama yapılandırma özellikleri açıklanmaktadır.
function.json özelliği | Açıklama |
---|---|
type | olarak ayarlanmalıdır blobTrigger . Bu özellik, Tetikleyiciyi Azure portalında oluşturduğunuzda otomatik olarak ayarlanır. |
direction | olarak ayarlanmalıdır in . Bu özellik, Tetikleyiciyi Azure portalında oluşturduğunuzda otomatik olarak ayarlanır. |
ad | İşlev kodundaki blobu temsil eden değişkenin adı. |
yol | İzlenecek kapsayıcı . Blob adı deseni olabilir. |
bağlantı | Azure Bloblarına nasıl bağlanıldığını belirten bir uygulama ayarının veya ayar koleksiyonunun adı. Bkz. Bağlantılar. |
Aşağıdaki örnekte, bağlamayı kullanan bir function.json dosyasında ve kodunda blob tetikleyici tanımı gösterilmektedir. İşlev, kapsayıcıya bir blob eklendiğinde veya güncelleştirildiğinde samples-workitems
bir günlük yazar.
function.json dosyasındaki bağlama verileri aşağıdadır:
{
"disabled": false,
"bindings": [
{
"name": "myBlob",
"type": "blobTrigger",
"direction": "in",
"path": "samples-workitems/{name}",
"connection":"MyStorageAccountAppSetting"
}
]
}
Blob tetikleyici yolundaki samples-workitems/{name}
dize{name}
, tetikleyici blobun dosya adına erişmek için işlev kodunda kullanabileceğiniz bir bağlama ifadesi oluşturur. Daha fazla bilgi için bkz . Blob adı desenleri.
bir 'e Stream
bağlanan C# betik kodu aşağıdadır:
public static void Run(Stream myBlob, string name, ILogger log)
{
log.LogInformation($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Length} Bytes");
}
bir 'e CloudBlockBlob
bağlanan C# betik kodu aşağıdadır:
#r "Microsoft.WindowsAzure.Storage"
using Microsoft.WindowsAzure.Storage.Blob;
public static void Run(CloudBlockBlob myBlob, string name, ILogger log)
{
log.LogInformation($"C# Blob trigger function Processed blob\n Name:{name}\nURI:{myBlob.StorageUri}");
}
Blob girişi
Aşağıdaki tabloda, function.json dosyasında ayarladığınız C# betiğinin bağlama yapılandırma özellikleri açıklanmaktadır.
function.json özelliği | Açıklama |
---|---|
type | olarak ayarlanmalıdır blob . |
direction | olarak ayarlanmalıdır in . |
ad | İşlev kodundaki blobu temsil eden değişkenin adı. |
yol | Blob yolu. |
bağlantı | Azure Bloblarına nasıl bağlanıldığını belirten bir uygulama ayarının veya ayar koleksiyonunun adı. Bkz. Bağlantılar. |
Aşağıdaki örnek, function.json dosyasındaki blob giriş ve çıkış bağlamalarını ve bağlamaları kullanan C# betik kodunu gösterir. işlevi bir metin blobunun kopyasını oluşturur. İşlev, kopyalanacak blobun adını içeren bir kuyruk iletisiyle tetikleniyor. Yeni blob {originalblobname}-Copy olarak adlandırılır.
function.json dosyasında meta veri özelliği, queueTrigger
özelliklerde path
blob adını belirtmek için kullanılır:
{
"bindings": [
{
"queueName": "myqueue-items",
"connection": "MyStorageConnectionAppSetting",
"name": "myQueueItem",
"type": "queueTrigger",
"direction": "in"
},
{
"name": "myInputBlob",
"type": "blob",
"path": "samples-workitems/{queueTrigger}",
"connection": "MyStorageConnectionAppSetting",
"direction": "in"
},
{
"name": "myOutputBlob",
"type": "blob",
"path": "samples-workitems/{queueTrigger}-Copy",
"connection": "MyStorageConnectionAppSetting",
"direction": "out"
}
],
"disabled": false
}
C# betik kodu aşağıdadır:
public static void Run(string myQueueItem, string myInputBlob, out string myOutputBlob, ILogger log)
{
log.LogInformation($"C# Queue trigger function processed: {myQueueItem}");
myOutputBlob = myInputBlob;
}
Blob çıkışı
Aşağıdaki tabloda, function.json dosyasında ayarladığınız C# betiğinin bağlama yapılandırma özellikleri açıklanmaktadır.
function.json özelliği | Açıklama |
---|---|
type | olarak ayarlanmalıdır blob . |
direction | olarak ayarlanmalıdır out . |
ad | İşlev kodundaki blobu temsil eden değişkenin adı. |
yol | Blob yolu. |
bağlantı | Azure Bloblarına nasıl bağlanıldığını belirten bir uygulama ayarının veya ayar koleksiyonunun adı. Bkz. Bağlantılar. |
Aşağıdaki örnek, function.json dosyasındaki blob giriş ve çıkış bağlamalarını ve bağlamaları kullanan C# betik kodunu gösterir. işlevi bir metin blobunun kopyasını oluşturur. İşlev, kopyalanacak blobun adını içeren bir kuyruk iletisiyle tetikleniyor. Yeni blob {originalblobname}-Copy olarak adlandırılır.
function.json dosyasında meta veri özelliği, queueTrigger
özelliklerde path
blob adını belirtmek için kullanılır:
{
"bindings": [
{
"queueName": "myqueue-items",
"connection": "MyStorageConnectionAppSetting",
"name": "myQueueItem",
"type": "queueTrigger",
"direction": "in"
},
{
"name": "myInputBlob",
"type": "blob",
"path": "samples-workitems/{queueTrigger}",
"connection": "MyStorageConnectionAppSetting",
"direction": "in"
},
{
"name": "myOutputBlob",
"type": "blob",
"path": "samples-workitems/{queueTrigger}-Copy",
"connection": "MyStorageConnectionAppSetting",
"direction": "out"
}
],
"disabled": false
}
C# betik kodu aşağıdadır:
public static void Run(string myQueueItem, string myInputBlob, out string myOutputBlob, ILogger log)
{
log.LogInformation($"C# Queue trigger function processed: {myQueueItem}");
myOutputBlob = myInputBlob;
}
RabbitMQ tetikleyicisi
Aşağıdaki örnekte, bir function.json dosyasındaki RabbitMQ tetikleyici bağlaması ve bağlamayı kullanan bir C# betik işlevi gösterilmektedir. İşlev RabbitMQ iletisini okur ve günlüğe kaydeder.
function.json dosyasındaki bağlama verileri aşağıdadır:
{
"bindings": [
{
"name": "myQueueItem",
"type": "rabbitMQTrigger",
"direction": "in",
"queueName": "queue",
"connectionStringSetting": "rabbitMQConnectionAppSetting"
}
]
}
C# betik kodu aşağıdadır:
using System;
public static void Run(string myQueueItem, ILogger log)
{
log.LogInformation($"C# Script RabbitMQ trigger function processed: {myQueueItem}");
}
Kuyruk tetikleyicisi
Aşağıdaki tabloda, function.json dosyasında ayarladığınız C# betiğinin bağlama yapılandırma özellikleri açıklanmaktadır.
function.json özelliği | Açıklama |
---|---|
type | olarak ayarlanmalıdır queueTrigger . Bu özellik, Tetikleyiciyi Azure portalında oluşturduğunuzda otomatik olarak ayarlanır. |
direction | Yalnızca function.json dosyasında. olarak ayarlanmalıdır in . Bu özellik, Tetikleyiciyi Azure portalında oluşturduğunuzda otomatik olarak ayarlanır. |
ad | İşlev kodundaki kuyruk öğesi yükünü içeren değişkenin adı. |
queueName | Yoklama kuyruğunun adı. |
bağlantı | Azure Kuyruklarına nasıl bağlanıldığını belirten bir uygulama ayarının veya ayar koleksiyonunun adı. Bkz. Bağlantılar. |
Aşağıdaki örnekte, function.json dosyasındaki bir kuyruk tetikleyicisi bağlaması ve bağlamayı kullanan C# betik kodu gösterilmektedir. İşlev kuyruğu yoklar myqueue-items
ve bir kuyruk öğesi her işlendiğinde bir günlük yazar.
İşte function.json dosyası:
{
"disabled": false,
"bindings": [
{
"type": "queueTrigger",
"direction": "in",
"name": "myQueueItem",
"queueName": "myqueue-items",
"connection":"MyStorageConnectionAppSetting"
}
]
}
C# betik kodu aşağıdadır:
#r "Microsoft.WindowsAzure.Storage"
using Microsoft.Extensions.Logging;
using Microsoft.WindowsAzure.Storage.Queue;
using System;
public static void Run(CloudQueueMessage myQueueItem,
DateTimeOffset expirationTime,
DateTimeOffset insertionTime,
DateTimeOffset nextVisibleTime,
string queueTrigger,
string id,
string popReceipt,
int dequeueCount,
ILogger log)
{
log.LogInformation($"C# Queue trigger function processed: {myQueueItem.AsString}\n" +
$"queueTrigger={queueTrigger}\n" +
$"expirationTime={expirationTime}\n" +
$"insertionTime={insertionTime}\n" +
$"nextVisibleTime={nextVisibleTime}\n" +
$"id={id}\n" +
$"popReceipt={popReceipt}\n" +
$"dequeueCount={dequeueCount}");
}
Kuyruk çıkışı
Aşağıdaki tabloda, function.json dosyasında ayarladığınız C# betiğinin bağlama yapılandırma özellikleri açıklanmaktadır.
function.json özelliği | Açıklama |
---|---|
type | olarak ayarlanmalıdır queue . Bu özellik, Tetikleyiciyi Azure portalında oluşturduğunuzda otomatik olarak ayarlanır. |
direction | olarak ayarlanmalıdır out . Bu özellik, Tetikleyiciyi Azure portalında oluşturduğunuzda otomatik olarak ayarlanır. |
ad | İşlev kodundaki kuyruğu temsil eden değişkenin adı. İşlev dönüş değerine başvurmak $return için olarak ayarlayın. |
queueName | Kuyruğun adı. |
bağlantı | Azure Kuyruklarına nasıl bağlanıldığını belirten bir uygulama ayarının veya ayar koleksiyonunun adı. Bkz. Bağlantılar. |
Aşağıdaki örnekte, function.json dosyasında http tetikleyici bağlaması ve bağlamayı kullanan C# betik kodu gösterilmektedir. İşlev, alınan her HTTP isteği için CustomQueueMessage nesne yüküne sahip bir kuyruk öğesi oluşturur.
İşte function.json dosyası:
{
"bindings": [
{
"type": "httpTrigger",
"direction": "in",
"authLevel": "function",
"name": "input"
},
{
"type": "http",
"direction": "out",
"name": "$return"
},
{
"type": "queue",
"direction": "out",
"name": "$return",
"queueName": "outqueue",
"connection": "MyStorageConnectionAppSetting"
}
]
}
Tek bir kuyruk iletisi oluşturan C# betik kodu aşağıdadır:
public class CustomQueueMessage
{
public string PersonName { get; set; }
public string Title { get; set; }
}
public static CustomQueueMessage Run(CustomQueueMessage input, ILogger log)
{
return input;
}
Bir veya IAsyncCollector
parametresini kullanarak ICollector
aynı anda birden çok ileti gönderebilirsiniz. Biri HTTP isteği verileri ve biri sabit kodlanmış değerler içeren birden çok ileti gönderen C# betik kodu aşağıdadır:
public static void Run(
CustomQueueMessage input,
ICollector<CustomQueueMessage> myQueueItems,
ILogger log)
{
myQueueItems.Add(input);
myQueueItems.Add(new CustomQueueMessage { PersonName = "You", Title = "None" });
}
Tablo girişi
Bu bölümde yalnızca uzantının Tablolar API'sinin sürümüne yönelik destek özetlenmiştir.
Aşağıdaki tabloda, function.json dosyasında ayarladığınız C# betiğinin bağlama yapılandırma özellikleri açıklanmaktadır.
function.json özelliği | Açıklama |
---|---|
type | olarak ayarlanmalıdır table . Bağlamayı Azure portalında oluşturduğunuzda bu özellik otomatik olarak ayarlanır. |
direction | olarak ayarlanmalıdır in . Bağlamayı Azure portalında oluşturduğunuzda bu özellik otomatik olarak ayarlanır. |
ad | İşlev kodundaki tabloyu veya varlığı temsil eden değişkenin adı. |
tableName | Tablonun adı. |
partitionKey | isteğe bağlı. Okunacak tablo varlığının bölüm anahtarı. |
rowKey | isteğe bağlı. Okunacak tablo varlığının satır anahtarı. veya filter ile take kullanılamaz. |
almak | isteğe bağlı. Döndürülecek varlık sayısı üst sınırı. ile rowKey kullanılamaz. |
filter | isteğe bağlı. Tablodan döndürülecek varlıklar için bir OData filtre ifadesi. ile rowKey kullanılamaz. |
bağlantı | Tablo hizmetine nasıl bağlanıldığını belirten bir uygulama ayarının veya ayar koleksiyonunun adı. Bkz. Bağlantılar. |
Aşağıdaki örnekte, function.json dosyasındaki bir tablo giriş bağlaması ve bağlamayı kullanan C# betik kodu gösterilmektedir. İşlev, tek bir tablo satırını okumak için kuyruk tetikleyicisi kullanır.
function.json dosyası bir partitionKey
ve rowKey
belirtir. rowKey
değeri{queueTrigger}
, satır anahtarının kuyruk ileti dizesinden geldiğini gösterir.
{
"bindings": [
{
"queueName": "myqueue-items",
"connection": "MyStorageConnectionAppSetting",
"name": "myQueueItem",
"type": "queueTrigger",
"direction": "in"
},
{
"name": "personEntity",
"type": "table",
"tableName": "Person",
"partitionKey": "Test",
"rowKey": "{queueTrigger}",
"connection": "MyStorageConnectionAppSetting",
"direction": "in"
}
],
"disabled": false
}
C# betik kodu aşağıdadır:
#r "Azure.Data.Tables"
using Microsoft.Extensions.Logging;
using Azure.Data.Tables;
public static void Run(string myQueueItem, Person personEntity, ILogger log)
{
log.LogInformation($"C# Queue trigger function processed: {myQueueItem}");
log.LogInformation($"Name in Person entity: {personEntity.Name}");
}
public class Person : ITableEntity
{
public string Name { get; set; }
public string PartitionKey { get; set; }
public string RowKey { get; set; }
public DateTimeOffset? Timestamp { get; set; }
public ETag ETag { get; set; }
}
Tablo çıkışı
Bu bölümde yalnızca uzantının Tablolar API'sinin sürümüne yönelik destek özetlenmiştir.
Aşağıdaki tabloda, function.json dosyasında ayarladığınız C# betiğinin bağlama yapılandırma özellikleri açıklanmaktadır.
function.json özelliği | Açıklama |
---|---|
type | olarak ayarlanmalıdır table . Bağlamayı Azure portalında oluşturduğunuzda bu özellik otomatik olarak ayarlanır. |
direction | olarak ayarlanmalıdır out . Bağlamayı Azure portalında oluşturduğunuzda bu özellik otomatik olarak ayarlanır. |
ad | Tablo veya varlığı temsil eden işlev kodunda kullanılan değişken adı. İşlev dönüş değerine başvurmak $return için olarak ayarlayın. |
tableName | Yazıldığı tablonun adı. |
partitionKey | Yazacak tablo varlığının bölüm anahtarı. |
rowKey | Yazacak tablo varlığının satır anahtarı. |
bağlantı | Tablo hizmetine nasıl bağlanıldığını belirten bir uygulama ayarının veya ayar koleksiyonunun adı. Bkz. Bağlantılar. |
Aşağıdaki örnekte, function.json dosyasındaki bir tablo çıkış bağlaması ve bağlamayı kullanan C# betik kodu gösterilmektedir. işlevi birden çok tablo varlığı yazar.
İşte function.json dosyası:
{
"bindings": [
{
"name": "input",
"type": "manualTrigger",
"direction": "in"
},
{
"tableName": "Person",
"connection": "MyStorageConnectionAppSetting",
"name": "tableBinding",
"type": "table",
"direction": "out"
}
],
"disabled": false
}
C# betik kodu aşağıdadır:
public static void Run(string input, ICollector<Person> tableBinding, ILogger log)
{
for (int i = 1; i < 10; i++)
{
log.LogInformation($"Adding Person entity {i}");
tableBinding.Add(
new Person() {
PartitionKey = "Test",
RowKey = i.ToString(),
Name = "Name" + i.ToString() }
);
}
}
public class Person
{
public string PartitionKey { get; set; }
public string RowKey { get; set; }
public string Name { get; set; }
}
Süreölçer tetikleyicisi
Aşağıdaki tabloda, function.json dosyasında ayarladığınız C# betiğinin bağlama yapılandırma özellikleri açıklanmaktadır.
function.json özelliği | Açıklama |
---|---|
type | olarak ayarlanmalıdır timerTrigger . Bu özellik, Tetikleyiciyi Azure portalında oluşturduğunuzda otomatik olarak ayarlanır. |
direction | olarak ayarlanmalıdır in . Bu özellik, Tetikleyiciyi Azure portalında oluşturduğunuzda otomatik olarak ayarlanır. |
ad | İşlev kodundaki zamanlayıcı nesnesini temsil eden değişkenin adı. |
schedule | CRON ifadesi veya TimeSpan değeri. yalnızca TimeSpan App Service Planı üzerinde çalışan bir işlev uygulaması için kullanılabilir. Zamanlama ifadesini bir uygulama ayarına ekleyebilir ve bu özelliği şu örnekte olduğu gibi işaretlerde % sarmalanmış uygulama ayarı adı olarak ayarlayabilirsiniz: "%ScheduleAppSetting%". |
runOnStartup | ise true , çalışma zamanı başlatıldığında işlev çağrılır. Örneğin işlev uygulaması etkinlik dışı olması nedeniyle boşta kaldıktan sonra uyandırıldığında çalışma zamanı başlatılır. işlev değişiklikleri nedeniyle işlev uygulaması yeniden başlatıldığında ve işlev uygulamasının ölçeği genişletildiğinde. Dikkatli kullanın. runOnStartup , özellikle üretimde olarak ayarlıysa true nadiren olmalıdır. |
useMonitor | Zamanlamanın izlenip izlenmeyeceğini göstermek üzere true veya false olarak ayarlayın. Zamanlama izleme, işlev uygulaması örnekleri yeniden başlatıldığında bile zamanlamanın doğru bir şekilde korunmasına yardımcı olmak için zamanlama yinelemelerinde kalıcı olur. Açıkça ayarlanmazsa, varsayılan değer true 1 dakikadan büyük veya buna eşit bir yineleme aralığına sahip zamanlamalar içindir. Dakikada bir kereden fazla tetikleyen zamanlamalar için varsayılan değerdir false . |
Aşağıdaki örnekte, bir function.json dosyasında zamanlayıcı tetikleyici bağlaması ve bağlamayı kullanan bir C# betik işlevi gösterilmektedir. İşlev, bu işlev çağrısının yanlış bir zamanlama oluşumundan kaynaklanıp kaynaklanmadığını belirten bir günlük yazar. TimerInfo
nesnesi işlevine geçirilir.
function.json dosyasındaki bağlama verileri aşağıdadır:
{
"schedule": "0 */5 * * * *",
"name": "myTimer",
"type": "timerTrigger",
"direction": "in"
}
C# betik kodu aşağıdadır:
public static void Run(TimerInfo myTimer, ILogger log)
{
if (myTimer.IsPastDue)
{
log.LogInformation("Timer is running late!");
}
log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}" );
}
HTTP tetikleyicisi
Aşağıdaki tabloda, function.json dosyasında ayarladığınız tetikleyici yapılandırma özellikleri açıklanmaktadır:
function.json özelliği | Açıklama |
---|---|
type | Gerekli - olarak httpTrigger ayarlanmalıdır. |
direction | Gerekli - olarak in ayarlanmalıdır. |
ad | Gerekli - istek veya istek gövdesi için işlev kodunda kullanılan değişken adı. |
authLevel | İşlevi çağırmak için istekte hangi anahtarların bulunması gerektiğini belirler. Desteklenen değerler için bkz . Yetkilendirme düzeyi. |
Yöntemler | İşlevin yanıt verdiği HTTP yöntemlerinin dizisi. Belirtilmezse, işlev tüm HTTP yöntemlerine yanıt verir. Bkz . HTTP uç noktasını özelleştirme. |
rota | İşlevinizin yanıt verdiği istek URL'lerini denetleyen rota şablonunu tanımlar. Hiçbiri sağlanmadıysa varsayılan değer olur <functionname> . Daha fazla bilgi için bkz . HTTP uç noktasını özelleştirme. |
webHookType | Yalnızca sürüm 1.x çalışma zamanı için desteklenir. HTTP tetikleyicisini, belirtilen sağlayıcı için bir web kancası alıcısı olarak davranacak şekilde yapılandırılır. Desteklenen değerler için bkz . Web Kancası türü. |
Aşağıdaki örnekte, bir function.json dosyasında tetikleyici bağlaması ve bağlamayı kullanan bir C# betik işlevi gösterilmektedir. İşlev, sorgu dizesinde veya HTTP isteğinin gövdesinde bir name
parametre arar.
İşte function.json dosyası:
{
"disabled": false,
"bindings": [
{
"authLevel": "function",
"name": "req",
"type": "httpTrigger",
"direction": "in",
"methods": [
"get",
"post"
]
},
{
"name": "$return",
"type": "http",
"direction": "out"
}
]
}
C# betik kodu şu şekilde bağlanır HttpRequest
:
#r "Newtonsoft.Json"
using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
public static async Task<IActionResult> Run(HttpRequest req, ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
string name = req.Query["name"];
string requestBody = String.Empty;
using (StreamReader streamReader = new StreamReader(req.Body))
{
requestBody = await streamReader.ReadToEndAsync();
}
dynamic data = JsonConvert.DeserializeObject(requestBody);
name = name ?? data?.name;
return name != null
? (ActionResult)new OkObjectResult($"Hello, {name}")
: new BadRequestObjectResult("Please pass a name on the query string or in the request body");
}
yerine HttpRequest
özel bir nesneye bağlayabilirsiniz. Bu nesne isteğin gövdesinden oluşturulur ve JSON olarak ayrıştırılır. Benzer şekilde, bir tür HTTP yanıt çıkış bağlamasına geçirilebilir ve bir durum koduyla 200
birlikte yanıt gövdesi olarak döndürülebilir.
using System.Net;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
public static string Run(Person person, ILogger log)
{
return person.Name != null
? (ActionResult)new OkObjectResult($"Hello, {person.Name}")
: new BadRequestObjectResult("Please pass an instance of Person.");
}
public class Person {
public string Name {get; set;}
}
HTTP çıkışı
Aşağıdaki tabloda, function.json dosyasında ayarladığınız bağlama yapılandırma özellikleri açıklanmaktadır.
Özellik | Açıklama |
---|---|
type | olarak ayarlanmalıdır http . |
direction | olarak ayarlanmalıdır out . |
ad | Yanıt için işlev kodunda veya $return dönüş değerini kullanmak için kullanılan değişken adı. |
Event Hubs tetikleyicisi
Aşağıdaki tabloda, function.json dosyasında ayarladığınız tetikleyici yapılandırma özellikleri açıklanmaktadır:
function.json özelliği | Açıklama |
---|---|
type | olarak ayarlanmalıdır eventHubTrigger . Bu özellik, Tetikleyiciyi Azure portalında oluşturduğunuzda otomatik olarak ayarlanır. |
direction | olarak ayarlanmalıdır in . Bu özellik, Tetikleyiciyi Azure portalında oluşturduğunuzda otomatik olarak ayarlanır. |
ad | İşlev kodundaki olay öğesini temsil eden değişkenin adı. |
eventHubName | İşlevler 2.x ve üzeri. Olay hub'ının adı. olay hub'ı adı da bağlantı dizesi mevcut olduğunda, bu değer çalışma zamanında bu özelliği geçersiz kılar. Uygulama ayarları %eventHubName% aracılığıyla başvurulabilir. Sürüm 1.x'te bu özellik olarak adlandırılır path . |
consumerGroup | Hub'daki olaylara abone olmak için kullanılan tüketici grubunu ayarlayan isteğe bağlı bir özellik. Atlanırsa, $Default tüketici grubu kullanılır. |
bağlantı | Event Hubs'a nasıl bağlanıldığını belirten bir uygulama ayarının veya ayar koleksiyonunun adı. Bkz. Bağlantılar. |
Aşağıdaki örnekte, bir function.json dosyasında Event Hubs tetikleyici bağlaması ve bağlamayı kullanan bir C# betik işlevi gösterilmektedir. İşlev, Event Hubs tetikleyicisinin ileti gövdesini günlüğe kaydeder.
Aşağıdaki örneklerde , İşlevler çalışma zamanı sürüm 2.x ve sonraki sürümleri için function.json dosyasında Event Hubs bağlama verileri gösterilmektedir.
{
"type": "eventHubTrigger",
"name": "myEventHubMessage",
"direction": "in",
"eventHubName": "MyEventHub",
"connection": "myEventHubReadConnectionAppSetting"
}
C# betik kodu aşağıdadır:
using System;
public static void Run(string myEventHubMessage, TraceWriter log)
{
log.Info($"C# function triggered to process a message: {myEventHubMessage}");
}
İşlev kodunda olay meta verilerine erişmek için bir EventData nesnesine bağlayın. Yöntem imzasında bağlama ifadelerini kullanarak da aynı özelliklere erişebilirsiniz. Aşağıdaki örnekte aynı verileri almanın her iki yolu da gösterilmektedir:
#r "Microsoft.Azure.EventHubs"
using System.Text;
using System;
using Microsoft.ServiceBus.Messaging;
using Microsoft.Azure.EventHubs;
public void Run(EventData myEventHubMessage,
DateTime enqueuedTimeUtc,
Int64 sequenceNumber,
string offset,
TraceWriter log)
{
log.Info($"Event: {Encoding.UTF8.GetString(myEventHubMessage.Body)}");
log.Info($"EnqueuedTimeUtc={myEventHubMessage.SystemProperties.EnqueuedTimeUtc}");
log.Info($"SequenceNumber={myEventHubMessage.SystemProperties.SequenceNumber}");
log.Info($"Offset={myEventHubMessage.SystemProperties.Offset}");
// Metadata accessed by using binding expressions
log.Info($"EnqueuedTimeUtc={enqueuedTimeUtc}");
log.Info($"SequenceNumber={sequenceNumber}");
log.Info($"Offset={offset}");
}
Olayları toplu olarak almak için veya dizisini yapın string
EventData
:
public static void Run(string[] eventHubMessages, TraceWriter log)
{
foreach (var message in eventHubMessages)
{
log.Info($"C# function triggered to process a message: {message}");
}
}
Event Hubs çıkışı
Aşağıdaki tabloda, function.json dosyasında ayarladığınız bağlama yapılandırma özellikleri açıklanmaktadır.
function.json özelliği | Açıklama |
---|---|
type | olarak ayarlanmalıdır eventHub . |
direction | olarak ayarlanmalıdır out . Bağlamayı Azure portalında oluşturduğunuzda bu parametre otomatik olarak ayarlanır. |
ad | Olayı temsil eden işlev kodunda kullanılan değişken adı. |
eventHubName | İşlevler 2.x ve üzeri. Olay hub'ının adı. olay hub'ı adı da bağlantı dizesi mevcut olduğunda, bu değer çalışma zamanında bu özelliği geçersiz kılar. İşlevler 1.x'te bu özellik olarak adlandırılır path . |
bağlantı | Event Hubs'a nasıl bağlanıldığını belirten bir uygulama ayarının veya ayar koleksiyonunun adı. Daha fazla bilgi için bkz . Bağlantılar. |
Aşağıdaki örnekte, bir function.json dosyasında olay hub'ı tetikleyici bağlaması ve bağlamayı kullanan bir C# betik işlevi gösterilmektedir. işlevi bir olay hub'ına bir ileti yazar.
Aşağıdaki örneklerde , İşlevler çalışma zamanı sürüm 2.x ve sonraki sürümleri için function.json dosyasında Event Hubs bağlama verileri gösterilmektedir.
{
"type": "eventHub",
"name": "outputEventHubMessage",
"eventHubName": "myeventhub",
"connection": "MyEventHubSendAppSetting",
"direction": "out"
}
Bir ileti oluşturan C# betik kodu aşağıdadır:
using System;
using Microsoft.Extensions.Logging;
public static void Run(TimerInfo myTimer, out string outputEventHubMessage, ILogger log)
{
String msg = $"TimerTriggerCSharp1 executed at: {DateTime.Now}";
log.LogInformation(msg);
outputEventHubMessage = msg;
}
Birden çok ileti oluşturan C# betik kodu aşağıdadır:
public static void Run(TimerInfo myTimer, ICollector<string> outputEventHubMessage, ILogger log)
{
string message = $"Message created at: {DateTime.Now}";
log.LogInformation(message);
outputEventHubMessage.Add("1 " + message);
outputEventHubMessage.Add("2 " + message);
}
Olay Kılavuzu tetikleyicisi
Aşağıdaki tabloda, function.json dosyasında ayarladığınız C# betiğinin bağlama yapılandırma özellikleri açıklanmaktadır. Özniteliğinde EventGridTrigger
ayarlanacağı oluşturucu parametresi veya özelliği yok.
function.json özelliği | Açıklama |
---|---|
type | Gerekli - olarak eventGridTrigger ayarlanmalıdır. |
direction | Gerekli - olarak in ayarlanmalıdır. |
ad | Gerekli - olay verilerini alan parametre için işlev kodunda kullanılan değişken adı. |
Aşağıdaki örnekte, function.json dosyasında tanımlanan bir Event Grid tetikleyicisi gösterilmektedir.
function.json dosyasındaki bağlama verileri aşağıdadır:
{
"bindings": [
{
"type": "eventGridTrigger",
"name": "eventGridEvent",
"direction": "in"
}
],
"disabled": false
}
Bağlama parametresi kullanan EventGridEvent
bir C# betik işlevi örneği aşağıda verilmiştir:
#r "Azure.Messaging.EventGrid"
using Azure.Messaging.EventGrid;
using Microsoft.Extensions.Logging;
public static void Run(EventGridEvent eventGridEvent, ILogger log)
{
log.LogInformation(eventGridEvent.Data.ToString());
}
Bağlama parametresi kullanan JObject
bir C# betik işlevi örneği aşağıda verilmiştir:
#r "Newtonsoft.Json"
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
public static void Run(JObject eventGridEvent, TraceWriter log)
{
log.Info(eventGridEvent.ToString(Formatting.Indented));
}
Event Grid çıkışı
Aşağıdaki tabloda, function.json dosyasında ayarladığınız C# betiğinin bağlama yapılandırma özellikleri açıklanmaktadır.
function.json özelliği | Açıklama |
---|---|
type | olarak ayarlanmalıdır eventGrid . |
direction | olarak ayarlanmalıdır out . Bağlamayı Azure portalında oluşturduğunuzda bu parametre otomatik olarak ayarlanır. |
ad | Olayı temsil eden işlev kodunda kullanılan değişken adı. |
topicEndpointUri | Gibi MyTopicEndpointUri özel konu için URI'yi içeren bir uygulama ayarının adı. |
topicKeySetting | Özel konu için erişim anahtarı içeren bir uygulama ayarının adı. |
Aşağıdaki örnekte, function.json dosyasındaki Event Grid çıkış bağlama verileri gösterilmektedir.
{
"type": "eventGrid",
"name": "outputEvent",
"topicEndpointUri": "MyEventGridTopicUriSetting",
"topicKeySetting": "MyEventGridTopicKeySetting",
"direction": "out"
}
Bir olay oluşturan C# betik kodu aşağıdadır:
#r "Microsoft.Azure.EventGrid"
using System;
using Microsoft.Azure.EventGrid.Models;
using Microsoft.Extensions.Logging;
public static void Run(TimerInfo myTimer, out EventGridEvent outputEvent, ILogger log)
{
outputEvent = new EventGridEvent("message-id", "subject-name", "event-data", "event-type", DateTime.UtcNow, "1.0");
}
Birden çok olay oluşturan C# betik kodu aşağıdadır:
#r "Microsoft.Azure.EventGrid"
using System;
using Microsoft.Azure.EventGrid.Models;
using Microsoft.Extensions.Logging;
public static void Run(TimerInfo myTimer, ICollector<EventGridEvent> outputEvent, ILogger log)
{
outputEvent.Add(new EventGridEvent("message-id-1", "subject-name", "event-data", "event-type", DateTime.UtcNow, "1.0"));
outputEvent.Add(new EventGridEvent("message-id-2", "subject-name", "event-data", "event-type", DateTime.UtcNow, "1.0"));
}
Service Bus tetikleyicisi
Aşağıdaki tabloda, function.json dosyasında ayarladığınız bağlama yapılandırma özellikleri açıklanmaktadır.
function.json özelliği | Açıklama |
---|---|
type | olarak ayarlanmalıdır serviceBusTrigger . Bu özellik, Tetikleyiciyi Azure portalında oluşturduğunuzda otomatik olarak ayarlanır. |
direction | olarak ayarlanmalıdır in . Bu özellik, Tetikleyiciyi Azure portalında oluşturduğunuzda otomatik olarak ayarlanır. |
ad | İşlev kodundaki kuyruk veya konu iletisini temsil eden değişkenin adı. |
queueName | İzlenecek kuyruğun adı. Bir konu için değil, yalnızca kuyruk izleniyorsa ayarlayın. |
topicName | İzlenecek konunun adı. Bir kuyruk için değil, yalnızca bir konu izleniyorsa ayarlayın. |
subscriptionName | İzlenecek aboneliğin adı. Bir kuyruk için değil, yalnızca bir konu izleniyorsa ayarlayın. |
bağlantı | Service Bus'a nasıl bağlanıldığını belirten bir uygulama ayarının veya ayar koleksiyonunun adı. Bkz. Bağlantılar. |
accessRights | bağlantı dizesi erişim hakları. Kullanılabilir değerler ve listen değerleridirmanage . Varsayılan değer, 'nin Yönet iznine sahip olduğunu connection gösteren değeridirmanage . Yönetme izni olmayan bir bağlantı dizesi kullanıyorsanız, "dinleme" olarak ayarlayınaccessRights . Aksi takdirde, İşlevler çalışma zamanı yönetme hakları gerektiren işlemleri gerçekleştirmeye çalışmayabilir. Service Bus SDK'sının en son sürümü işlemleri yönetmeyi desteklemediğinden, Azure İşlevleri sürüm 2.x ve üzeri sürümlerde bu özellik kullanılamaz. |
isSessionsEnabled | true oturum kullanan bir kuyruğa veya aboneliğe bağlanıyorsanız. false aksi takdirde, varsayılan değerdir. |
otomatik tamamlama | true tetikleyicisinin işlemeden sonra otomatik olarak complete çağrısı yapması gerektiğinde veya işlev kodu el ile complete çağrısı yapacaksa.ayarı false yalnızca C# dilinde desteklenir.olarak ayarlanırsa true , işlev yürütmesi başarıyla tamamlanırsa tetikleyici iletiyi otomatik olarak tamamlar ve aksi takdirde iletiyi bırakır.<br/olarak false ayarlandığında, iletiyi, oturumu veya toplu işlemi tamamlamak, bırakmak veya geçersiz hale getirmek için ServiceBusReceiver yöntemlerini çağırmaktan sorumlusunuz. Bir özel durum oluştuğunda ServiceBusReceiver (ve yöntemlerden hiçbiri çağrılmadığında), kilit kalır. Kilidin süresi dolduktan sonra, ileti artımlı olarak DeliveryCount yeniden kuyruğa alınır ve kilit otomatik olarak yenilenir.Bu özellik yalnızca Azure İşlevleri 2.x ve üzeri sürümlerde kullanılabilir. |
Aşağıdaki örnekte, function.json dosyasında service bus tetikleyici bağlaması ve bağlamayı kullanan bir C# betik işlevi gösterilmektedir. İşlev, ileti meta verilerini okur ve Service Bus kuyruk iletisini günlüğe kaydeder.
function.json dosyasındaki bağlama verileri aşağıdadır:
{
"bindings": [
{
"queueName": "testqueue",
"connection": "MyServiceBusConnection",
"name": "myQueueItem",
"type": "serviceBusTrigger",
"direction": "in"
}
],
"disabled": false
}
C# betik kodu aşağıdadır:
using System;
public static void Run(string myQueueItem,
Int32 deliveryCount,
DateTime enqueuedTimeUtc,
string messageId,
TraceWriter log)
{
log.Info($"C# ServiceBus queue trigger function processed message: {myQueueItem}");
log.Info($"EnqueuedTimeUtc={enqueuedTimeUtc}");
log.Info($"DeliveryCount={deliveryCount}");
log.Info($"MessageId={messageId}");
}
Service Bus çıkışı
Aşağıdaki tabloda, function.json dosyasında ayarladığınız bağlama yapılandırma özellikleri açıklanmaktadır.
function.json özelliği | Açıklama |
---|---|
type | olarak ayarlanmalıdır serviceBus . Bu özellik, Tetikleyiciyi Azure portalında oluşturduğunuzda otomatik olarak ayarlanır. |
direction | olarak ayarlanmalıdır out . Bu özellik, Tetikleyiciyi Azure portalında oluşturduğunuzda otomatik olarak ayarlanır. |
ad | İşlev kodundaki kuyruk veya konu iletisini temsil eden değişkenin adı. İşlev dönüş değerine başvurmak için "$return" olarak ayarlayın. |
queueName | Kuyruğun adı. Bir konu için değil, yalnızca kuyruk iletileri gönderiliyorsa ayarlayın. |
topicName | Konunun adı. Kuyruk için değil, yalnızca konu iletileri gönderiliyorsa ayarlayın. |
bağlantı | Service Bus'a nasıl bağlanıldığını belirten bir uygulama ayarının veya ayar koleksiyonunun adı. Bkz. Bağlantılar. |
accessRights (yalnızca v1) | bağlantı dizesi erişim hakları. Kullanılabilir değerler ve listen değerleridirmanage . Varsayılan değer, 'nin Yönet iznine sahip olduğunu connection gösteren değeridirmanage . Yönetme izni olmayan bir bağlantı dizesi kullanıyorsanız, "dinleme" olarak ayarlayınaccessRights . Aksi takdirde, İşlevler çalışma zamanı yönetme hakları gerektiren işlemleri gerçekleştirmeye çalışmayabilir. Service Bus SDK'sının en son sürümü işlemleri yönetmeyi desteklemediğinden, Azure İşlevleri sürüm 2.x ve üzeri sürümlerde bu özellik kullanılamaz. |
Aşağıdaki örnekte, bir function.json dosyasında service bus çıkış bağlaması ve bağlamayı kullanan bir C# betik işlevi gösterilmektedir. İşlev, her 15 saniyede bir kuyruk iletisi göndermek için zamanlayıcı tetikleyicisi kullanır.
function.json dosyasındaki bağlama verileri aşağıdadır:
{
"bindings": [
{
"schedule": "0/15 * * * * *",
"name": "myTimer",
"runsOnStartup": true,
"type": "timerTrigger",
"direction": "in"
},
{
"name": "outputSbQueue",
"type": "serviceBus",
"queueName": "testqueue",
"connection": "MyServiceBusConnection",
"direction": "out"
}
],
"disabled": false
}
Tek bir ileti oluşturan C# betik kodu aşağıdadır:
public static void Run(TimerInfo myTimer, ILogger log, out string outputSbQueue)
{
string message = $"Service Bus queue message created at: {DateTime.Now}";
log.LogInformation(message);
outputSbQueue = message;
}
Birden çok ileti oluşturan C# betik kodu aşağıdadır:
public static async Task Run(TimerInfo myTimer, ILogger log, IAsyncCollector<string> outputSbQueue)
{
string message = $"Service Bus queue messages created at: {DateTime.Now}";
log.LogInformation(message);
await outputSbQueue.AddAsync("1 " + message);
await outputSbQueue.AddAsync("2 " + message);
}
Azure Cosmos DB v2 tetikleyicisi
Bu bölümde yalnızca uzantının 4.x+ sürümüne yönelik destek özetlenmiştir.
Aşağıdaki tabloda, function.json dosyasında ayarladığınız bağlama yapılandırma özellikleri açıklanmaktadır.
function.json özelliği | Açıklama |
---|---|
type | olarak ayarlanmalıdır cosmosDBTrigger . |
direction | olarak ayarlanmalıdır in . Bu parametre, Tetikleyiciyi Azure portalında oluşturduğunuzda otomatik olarak ayarlanır. |
ad | Değişiklikleri olan belgelerin listesini temsil eden işlev kodunda kullanılan değişken adı. |
bağlantı | İzlenen Azure Cosmos DB hesabına nasıl bağlanıldığını belirten bir uygulama ayarının veya ayar koleksiyonunun adı. Daha fazla bilgi için bkz . Bağlantılar. |
databaseName | Kapsayıcının izlendiği Azure Cosmos DB veritabanının adı. |
containerName | İzlenen kapsayıcının adı. |
leaseConnection | (İsteğe bağlı) Kira kapsayıcısını barındıran Azure Cosmos DB hesabına nasıl bağlanıldığını belirten bir uygulama ayarının veya ayar kapsayıcısının adı. Ayarlanmadığında connection , değer kullanılır. Bu parametre, portalda bağlama oluşturulduğunda otomatik olarak ayarlanır. Kira kapsayıcısı için bağlantı dizesi yazma izinlerine sahip olmalıdır. |
leaseDatabaseName | (İsteğe bağlı) Kiraları depolamak için kullanılan kapsayıcıyı tutan veritabanının adı. Ayarlanmadığında, ayarın databaseName değeri kullanılır. |
leaseContainerName | (İsteğe bağlı) Kiraları depolamak için kullanılan kapsayıcının adı. Ayarlanmadığında, değer leases kullanılır. |
createLeaseContainerIfNotExists | (İsteğe bağlı) olarak true ayarlandığında, kira kapsayıcısı henüz mevcut olmadığında otomatik olarak oluşturulur. Varsayılan değer şudur: false . Değerini true olarak ayarlarsanız Microsoft Entra kimliklerini kullanırken kapsayıcı oluşturma işlemine izin verilmez ve İşleviniz başlatılamaz. |
leasesContainerThroughput | (İsteğe bağlı) Kira kapsayıcısı oluşturulduğunda atanacak İstek Birimi sayısını tanımlar. Bu ayar yalnızca olarak ayarlandığında true kullanılırcreateLeaseContainerIfNotExists . Bağlama portal kullanılarak oluşturulduğunda bu parametre otomatik olarak ayarlanır. |
leaseContainerPrefix | (İsteğe bağlı) Ayarlandığında, değer bu işlev için Kira kapsayıcısında oluşturulan kiralara ön ek olarak eklenir. Ön ek kullanmak, iki ayrı Azure İşlevleri farklı ön ekleri kullanarak aynı Kira kapsayıcısını paylaşmasına olanak tanır. |
feedPollDelay | (İsteğe bağlı) Tüm geçerli değişiklikler boşaltıldıktan sonra akıştaki yeni değişiklikler için bölümü yoklama arasındaki gecikme süresi (milisaniye cinsinden). Varsayılan değer 5.000 milisaniye veya 5 saniyedir. |
leaseAcquireInterval | (İsteğe bağlı) Ayarlandığında, bölümlerin bilinen konak örnekleri arasında eşit olarak dağıtılıp dağıtılamadığını hesaplamak için bir görevi başlatma aralığını milisaniye cinsinden tanımlar. Varsayılan değer 13000 'dir (13 saniye). |
leaseExpirationInterval | (İsteğe bağlı) Ayarlandığında, bölümü temsil eden bir kirada kiranın alındığı aralığı milisaniye cinsinden tanımlar. Kira bu aralık içinde yenilenmezse süresi dolmasına neden olur ve bölümün sahipliği başka bir örneğe taşınır. Varsayılan değer 60000 'dir (60 saniye). |
leaseRenewInterval | (İsteğe bağlı) Ayarlandığında, o anda bir örnek tarafından tutulan bölümler için tüm kiralamalar için yenileme aralığını milisaniye cinsinden tanımlar. Varsayılan değer 17000 'dir (17 saniye). |
maxItemsPerInvocation | (İsteğe bağlı) Ayarlandığında, bu özellik İşlev çağrısı başına alınan en fazla öğe sayısını ayarlar. İzlenen kapsayıcıdaki işlemler saklı yordamlar aracılığıyla gerçekleştiriliyorsa, değişiklik akışındaki öğeler okunurken işlem kapsamı korunur. Sonuç olarak, alınan öğe sayısı belirtilen değerden yüksek olabilir, böylece aynı işlem tarafından değiştirilen öğeler tek bir atomik toplu işlemin parçası olarak döndürülür. |
startFromBeginning | (İsteğe bağlı) Bu seçenek Tetikleyici'ye geçerli zamanda başlamak yerine kapsayıcının değişiklik geçmişinin başından itibaren değişiklikleri okumasını söyler. Baştan okuma yalnızca tetikleyici ilk kez başlatıldığında çalışır, sonraki çalıştırmalarda olduğu gibi denetim noktaları zaten depolanır. Bu seçeneğin true zaten oluşturulmuş kiralar olduğunda olarak ayarlanmasının hiçbir etkisi yoktur. |
startFromTime | (İsteğe bağlı) Değişiklik akışı okuma işleminin başlatıldığı tarih ve saati alır veya ayarlar. Önerilen biçim, GIBI 2021-02-16T14:19:29Z UTC belirleyicisi ile ISO 8601'dir. Bu yalnızca ilk tetikleyici durumunu ayarlamak için kullanılır. Tetikleyici kiralama durumuna geldikten sonra bu değerin değiştirilmesinin hiçbir etkisi olmaz. |
preferredLocations | (İsteğe bağlı) Azure Cosmos DB hizmetinde coğrafi olarak çoğaltılan veritabanı hesapları için tercih edilen konumları (bölgeleri) tanımlar. Değerler virgülle ayrılmış olmalıdır. Örneğin, "Doğu ABD,Orta Güney ABD,Kuzey Avrupa". |
Aşağıdaki örnekte, bir function.json dosyasındaki Azure Cosmos DB tetikleyici bağlaması ve bağlamayı kullanan bir C# betik işlevi gösterilmektedir. İşlev, Azure Cosmos DB kayıtları eklendiğinde veya değiştirildiğinde günlük iletileri yazar.
function.json dosyasındaki bağlama verileri aşağıdadır:
{
"type": "cosmosDBTrigger",
"name": "documents",
"direction": "in",
"leaseContainerName": "leases",
"connection": "<connection-app-setting>",
"databaseName": "Tasks",
"containerName": "Items",
"createLeaseContainerIfNotExists": true
}
C# betik kodu aşağıdadır:
using System;
using System.Collections.Generic;
using Microsoft.Extensions.Logging;
// Customize the model with your own desired properties
public class ToDoItem
{
public string id { get; set; }
public string Description { get; set; }
}
public static void Run(IReadOnlyList<ToDoItem> documents, ILogger log)
{
log.LogInformation("Documents modified " + documents.Count);
log.LogInformation("First document Id " + documents[0].id);
}
Azure Cosmos DB v2 girişi
Bu bölümde yalnızca uzantının 4.x+ sürümüne yönelik destek özetlenmiştir.
Aşağıdaki tabloda, function.json dosyasında ayarladığınız bağlama yapılandırma özellikleri açıklanmaktadır.
function.json özelliği | Açıklama |
---|---|
type | olarak ayarlanmalıdır cosmosDB . |
direction | olarak ayarlanmalıdır in . |
ad | Değişiklikleri olan belgelerin listesini temsil eden işlev kodunda kullanılan değişken adı. |
bağlantı | İzlenen Azure Cosmos DB hesabına nasıl bağlanıldığını belirten bir uygulama ayarının veya ayar kapsayıcısının adı. Daha fazla bilgi için bkz . Bağlantılar. |
databaseName | Kapsayıcının izlendiği Azure Cosmos DB veritabanının adı. |
containerName | İzlenen kapsayıcının adı. |
partitionKey | Arama için bölüm anahtarı değerini belirtir. Bağlama parametreleri içerebilir. Bölümlenmiş kapsayıcılardaki aramalar için gereklidir. |
id | Alınacak belgenin kimliği. Bu özellik bağlama ifadelerini destekler. hem hem sqlQuery de id özelliklerini ayarlamayın. Herhangi birini ayarlamazsanız kapsayıcının tamamı alınır. |
sqlQuery | Birden çok belgeyi almak için kullanılan bir Azure Cosmos DB SQL sorgusu. özelliği, şu örnekte olduğu gibi çalışma zamanı bağlamalarını destekler: SELECT * FROM c where c.departmentId = {departmentId} . hem hem sqlQuery de id özelliklerini ayarlamayın. Herhangi birini ayarlamazsanız kapsayıcının tamamı alınır. |
preferredLocations | (İsteğe bağlı) Azure Cosmos DB hizmetinde coğrafi olarak çoğaltılan veritabanı hesapları için tercih edilen konumları (bölgeleri) tanımlar. Değerler virgülle ayrılmış olmalıdır. Örneğin, East US,South Central US,North Europe . |
Bu bölüm aşağıdaki örnekleri içerir:
- Kuyruk tetikleyicisi, dizeden kimlik arama
- SqlQuery kullanarak kuyruk tetikleyicisi, birden çok belge alma
- HTTP tetikleyicisi, sorgu dizesinden kimlik arama
- HTTP tetikleyicisi, rota verilerinden kimlik arama
- SQLQuery kullanarak HTTP tetikleyicisi, birden çok belge alma
- DOCUMENTClient kullanarak HTTP tetikleyicisi, birden çok belge alma
HTTP tetikleyicisi örnekleri basit ToDoItem
bir türe başvurur:
namespace CosmosDBSamplesV2
{
public class ToDoItem
{
public string Id { get; set; }
public string Description { get; set; }
}
}
Kuyruk tetikleyicisi, dizeden kimlik arama
Aşağıdaki örnekte bir function.json dosyasındaki Azure Cosmos DB giriş bağlaması ve bağlamayı kullanan bir C# betik işlevi gösterilmektedir. işlevi tek bir belgeyi okur ve belgenin metin değerini güncelleştirir.
function.json dosyasındaki bağlama verileri aşağıdadır:
{
"name": "inputDocument",
"type": "cosmosDB",
"databaseName": "MyDatabase",
"collectionName": "MyCollection",
"id" : "{queueTrigger}",
"partitionKey": "{partition key value}",
"connectionStringSetting": "MyAccount_COSMOSDB",
"direction": "in"
}
C# betik kodu aşağıdadır:
using System;
// Change input document contents using Azure Cosmos DB input binding
public static void Run(string myQueueItem, dynamic inputDocument)
{
inputDocument.text = "This has changed.";
}
SqlQuery kullanarak kuyruk tetikleyicisi, birden çok belge alma
Aşağıdaki örnekte bir function.json dosyasındaki Azure Cosmos DB giriş bağlaması ve bağlamayı kullanan bir C# betik işlevi gösterilmektedir. İşlev, sorgu parametrelerini özelleştirmek için bir kuyruk tetikleyicisi kullanarak SQL sorgusu tarafından belirtilen birden çok belgeyi alır.
Kuyruk tetikleyicisi bir parametresi departmentId
sağlar. kuyruk iletisi { "departmentId" : "Finance" }
, finans departmanı için tüm kayıtları döndürür.
function.json dosyasındaki bağlama verileri aşağıdadır:
{
"name": "documents",
"type": "cosmosDB",
"direction": "in",
"databaseName": "MyDb",
"collectionName": "MyCollection",
"sqlQuery": "SELECT * from c where c.departmentId = {departmentId}",
"connectionStringSetting": "CosmosDBConnection"
}
C# betik kodu aşağıdadır:
public static void Run(QueuePayload myQueueItem, IEnumerable<dynamic> documents)
{
foreach (var doc in documents)
{
// operate on each document
}
}
public class QueuePayload
{
public string departmentId { get; set; }
}
HTTP tetikleyicisi, sorgu dizesinden kimlik arama
Aşağıdaki örnekte, tek bir belgeyi alan bir C# betik işlevi gösterilmektedir. İşlev, arama için kimlik ve bölüm anahtarı değerini belirtmek için sorgu dizesi kullanan bir HTTP isteği tarafından tetikleniyor. Bu kimlik ve bölüm anahtarı değeri, belirtilen veritabanından ve koleksiyondan belge ToDoItem
almak için kullanılır.
İşte function.json dosyası:
{
"bindings": [
{
"authLevel": "anonymous",
"name": "req",
"type": "httpTrigger",
"direction": "in",
"methods": [
"get",
"post"
]
},
{
"name": "$return",
"type": "http",
"direction": "out"
},
{
"type": "cosmosDB",
"name": "toDoItem",
"databaseName": "ToDoItems",
"collectionName": "Items",
"connectionStringSetting": "CosmosDBConnection",
"direction": "in",
"Id": "{Query.id}",
"PartitionKey" : "{Query.partitionKeyValue}"
}
],
"disabled": false
}
C# betik kodu aşağıdadır:
using System.Net;
using Microsoft.Extensions.Logging;
public static HttpResponseMessage Run(HttpRequestMessage req, ToDoItem toDoItem, ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
if (toDoItem == null)
{
log.LogInformation($"ToDo item not found");
}
else
{
log.LogInformation($"Found ToDo item, Description={toDoItem.Description}");
}
return req.CreateResponse(HttpStatusCode.OK);
}
HTTP tetikleyicisi, rota verilerinden kimlik arama
Aşağıdaki örnekte, tek bir belgeyi alan bir C# betik işlevi gösterilmektedir. İşlev, arama için kimlik ve bölüm anahtarı değerini belirtmek için yol verilerini kullanan bir HTTP isteği tarafından tetikleniyor. Bu kimlik ve bölüm anahtarı değeri, belirtilen veritabanından ve koleksiyondan belge ToDoItem
almak için kullanılır.
İşte function.json dosyası:
{
"bindings": [
{
"authLevel": "anonymous",
"name": "req",
"type": "httpTrigger",
"direction": "in",
"methods": [
"get",
"post"
],
"route":"todoitems/{partitionKeyValue}/{id}"
},
{
"name": "$return",
"type": "http",
"direction": "out"
},
{
"type": "cosmosDB",
"name": "toDoItem",
"databaseName": "ToDoItems",
"collectionName": "Items",
"connectionStringSetting": "CosmosDBConnection",
"direction": "in",
"id": "{id}",
"partitionKey": "{partitionKeyValue}"
}
],
"disabled": false
}
C# betik kodu aşağıdadır:
using System.Net;
using Microsoft.Extensions.Logging;
public static HttpResponseMessage Run(HttpRequestMessage req, ToDoItem toDoItem, ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
if (toDoItem == null)
{
log.LogInformation($"ToDo item not found");
}
else
{
log.LogInformation($"Found ToDo item, Description={toDoItem.Description}");
}
return req.CreateResponse(HttpStatusCode.OK);
}
SQLQuery kullanarak HTTP tetikleyicisi, birden çok belge alma
Aşağıdaki örnekte belgelerin listesini alan bir C# betik işlevi gösterilmektedir. İşlev bir HTTP isteği tarafından tetikleniyor. Sorgu öznitelik özelliğinde SqlQuery
belirtilir.
İşte function.json dosyası:
{
"bindings": [
{
"authLevel": "anonymous",
"name": "req",
"type": "httpTrigger",
"direction": "in",
"methods": [
"get",
"post"
]
},
{
"name": "$return",
"type": "http",
"direction": "out"
},
{
"type": "cosmosDB",
"name": "toDoItems",
"databaseName": "ToDoItems",
"collectionName": "Items",
"connectionStringSetting": "CosmosDBConnection",
"direction": "in",
"sqlQuery": "SELECT top 2 * FROM c order by c._ts desc"
}
],
"disabled": false
}
C# betik kodu aşağıdadır:
using System.Net;
using Microsoft.Extensions.Logging;
public static HttpResponseMessage Run(HttpRequestMessage req, IEnumerable<ToDoItem> toDoItems, ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
foreach (ToDoItem toDoItem in toDoItems)
{
log.LogInformation(toDoItem.Description);
}
return req.CreateResponse(HttpStatusCode.OK);
}
DOCUMENTClient kullanarak HTTP tetikleyicisi, birden çok belge alma
Aşağıdaki örnekte belgelerin listesini alan bir C# betik işlevi gösterilmektedir. İşlev bir HTTP isteği tarafından tetikleniyor. Kod, belge listesini okumak için Azure Cosmos DB bağlaması tarafından sağlanan bir örneği kullanır DocumentClient
. Örnek DocumentClient
, yazma işlemleri için de kullanılabilir.
İşte function.json dosyası:
{
"bindings": [
{
"authLevel": "anonymous",
"name": "req",
"type": "httpTrigger",
"direction": "in",
"methods": [
"get",
"post"
]
},
{
"name": "$return",
"type": "http",
"direction": "out"
},
{
"type": "cosmosDB",
"name": "client",
"databaseName": "ToDoItems",
"collectionName": "Items",
"connectionStringSetting": "CosmosDBConnection",
"direction": "inout"
}
],
"disabled": false
}
C# betik kodu aşağıdadır:
#r "Microsoft.Azure.Documents.Client"
using System.Net;
using Microsoft.Azure.Documents.Client;
using Microsoft.Azure.Documents.Linq;
using Microsoft.Extensions.Logging;
public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, DocumentClient client, ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
Uri collectionUri = UriFactory.CreateDocumentCollectionUri("ToDoItems", "Items");
string searchterm = req.GetQueryNameValuePairs()
.FirstOrDefault(q => string.Compare(q.Key, "searchterm", true) == 0)
.Value;
if (searchterm == null)
{
return req.CreateResponse(HttpStatusCode.NotFound);
}
log.LogInformation($"Searching for word: {searchterm} using Uri: {collectionUri.ToString()}");
IDocumentQuery<ToDoItem> query = client.CreateDocumentQuery<ToDoItem>(collectionUri)
.Where(p => p.Description.Contains(searchterm))
.AsDocumentQuery();
while (query.HasMoreResults)
{
foreach (ToDoItem result in await query.ExecuteNextAsync())
{
log.LogInformation(result.Description);
}
}
return req.CreateResponse(HttpStatusCode.OK);
}
Azure Cosmos DB v2 çıkışı
Bu bölümde yalnızca uzantının 4.x+ sürümüne yönelik destek özetlenmiştir.
Aşağıdaki tabloda, function.json dosyasında ayarladığınız bağlama yapılandırma özellikleri açıklanmaktadır.
function.json özelliği | Açıklama |
---|---|
bağlantı | İzlenen Azure Cosmos DB hesabına nasıl bağlanıldığını belirten bir uygulama ayarının veya ayar koleksiyonunun adı. Daha fazla bilgi için bkz . Bağlantılar. |
databaseName | Kapsayıcının izlendiği Azure Cosmos DB veritabanının adı. |
containerName | İzlenen kapsayıcının adı. |
createIfNotExists | Kapsayıcının mevcut olmadığında oluşturulup oluşturulmadığını gösteren boole değeri. Varsayılan değer false'tur çünkü yeni kapsayıcılar ayrılmış aktarım hızıyla oluşturulur ve bunun maliyet etkileri vardır. Daha fazla bilgi için bkz. fiyatlandırma sayfası. |
partitionKey | True createIfNotExists olduğunda, oluşturulan kapsayıcı için bölüm anahtarı yolunu tanımlar. Bağlama parametreleri içerebilir. |
containerThroughput | True createIfNotExists olduğunda, oluşturulan kapsayıcının aktarım hızını tanımlar. |
preferredLocations | (İsteğe bağlı) Azure Cosmos DB hizmetinde coğrafi olarak çoğaltılan veritabanı hesapları için tercih edilen konumları (bölgeleri) tanımlar. Değerler virgülle ayrılmış olmalıdır. Örneğin, East US,South Central US,North Europe . |
Bu bölüm aşağıdaki örnekleri içerir:
Kuyruk tetikleyicisi, bir belge yazma
Aşağıdaki örnekte, bir function.json dosyasındaki Azure Cosmos DB çıkış bağlaması ve bağlamayı kullanan bir C# betik işlevi gösterilmektedir. İşlev, aşağıdaki biçimde JSON alan bir kuyruk için kuyruk giriş bağlaması kullanır:
{
"name": "John Henry",
"employeeId": "123456",
"address": "A town nearby"
}
İşlev, her kayıt için aşağıdaki biçimde Azure Cosmos DB belgeleri oluşturur:
{
"id": "John Henry-123456",
"name": "John Henry",
"employeeId": "123456",
"address": "A town nearby"
}
function.json dosyasındaki bağlama verileri aşağıdadır:
{
"name": "employeeDocument",
"type": "cosmosDB",
"databaseName": "MyDatabase",
"collectionName": "MyCollection",
"createIfNotExists": true,
"connectionStringSetting": "MyAccount_COSMOSDB",
"direction": "out"
}
C# betik kodu aşağıdadır:
#r "Newtonsoft.Json"
using Microsoft.Azure.WebJobs.Host;
using Newtonsoft.Json.Linq;
using Microsoft.Extensions.Logging;
public static void Run(string myQueueItem, out object employeeDocument, ILogger log)
{
log.LogInformation($"C# Queue trigger function processed: {myQueueItem}");
dynamic employee = JObject.Parse(myQueueItem);
employeeDocument = new {
id = employee.name + "-" + employee.employeeId,
name = employee.name,
employeeId = employee.employeeId,
address = employee.address
};
}
Kuyruk tetikleyicisi, IAsyncCollector kullanarak belge yazma
Birden çok belge oluşturmak için, desteklenen türlerden birine veya IAsyncCollector<T>
nereye T
bağlanabilirsinizICollector<T>
.
Bu örnek basit ToDoItem
bir türe başvurur:
namespace CosmosDBSamplesV2
{
public class ToDoItem
{
public string id { get; set; }
public string Description { get; set; }
}
}
İşte function.json dosyası:
{
"bindings": [
{
"name": "toDoItemsIn",
"type": "queueTrigger",
"direction": "in",
"queueName": "todoqueueforwritemulti",
"connectionStringSetting": "AzureWebJobsStorage"
},
{
"type": "cosmosDB",
"name": "toDoItemsOut",
"databaseName": "ToDoItems",
"collectionName": "Items",
"connectionStringSetting": "CosmosDBConnection",
"direction": "out"
}
],
"disabled": false
}
C# betik kodu aşağıdadır:
using System;
using Microsoft.Extensions.Logging;
public static async Task Run(ToDoItem[] toDoItemsIn, IAsyncCollector<ToDoItem> toDoItemsOut, ILogger log)
{
log.LogInformation($"C# Queue trigger function processed {toDoItemsIn?.Length} items");
foreach (ToDoItem toDoItem in toDoItemsIn)
{
log.LogInformation($"Description={toDoItem.Description}");
await toDoItemsOut.AddAsync(toDoItem);
}
}
Azure Cosmos DB v1 tetikleyicisi
Aşağıdaki örnekte, bir function.json dosyasındaki Azure Cosmos DB tetikleyici bağlaması ve bağlamayı kullanan bir C# betik işlevi gösterilmektedir. İşlev, Azure Cosmos DB kayıtları değiştirildiğinde günlük iletileri yazar.
function.json dosyasındaki bağlama verileri aşağıdadır:
{
"type": "cosmosDBTrigger",
"name": "documents",
"direction": "in",
"leaseCollectionName": "leases",
"connectionStringSetting": "<connection-app-setting>",
"databaseName": "Tasks",
"collectionName": "Items",
"createLeaseCollectionIfNotExists": true
}
C# betik kodu aşağıdadır:
#r "Microsoft.Azure.Documents.Client"
using System;
using Microsoft.Azure.Documents;
using System.Collections.Generic;
public static void Run(IReadOnlyList<Document> documents, TraceWriter log)
{
log.Info("Documents modified " + documents.Count);
log.Info("First document Id " + documents[0].Id);
}
Azure Cosmos DB v1 girişi
Bu bölüm aşağıdaki örnekleri içerir:
- Kuyruk tetikleyicisi, dizeden kimlik arama
- SqlQuery kullanarak kuyruk tetikleyicisi, birden çok belge alma
- HTTP tetikleyicisi, sorgu dizesinden kimlik arama
- HTTP tetikleyicisi, rota verilerinden kimlik arama
- SQLQuery kullanarak HTTP tetikleyicisi, birden çok belge alma
- DOCUMENTClient kullanarak HTTP tetikleyicisi, birden çok belge alma
HTTP tetikleyicisi örnekleri basit ToDoItem
bir türe başvurur:
namespace CosmosDBSamplesV1
{
public class ToDoItem
{
public string Id { get; set; }
public string Description { get; set; }
}
}
Kuyruk tetikleyicisi, dizeden kimlik arama
Aşağıdaki örnekte, bir function.json dosyasındaki Azure Cosmos DB giriş bağlaması ve bağlamayı kullanan bir C# betik işlevi gösterilmektedir. işlevi tek bir belgeyi okur ve belgenin metin değerini güncelleştirir.
function.json dosyasındaki bağlama verileri aşağıdadır:
{
"name": "inputDocument",
"type": "documentDB",
"databaseName": "MyDatabase",
"collectionName": "MyCollection",
"id" : "{queueTrigger}",
"partitionKey": "{partition key value}",
"connection": "MyAccount_COSMOSDB",
"direction": "in"
}
C# betik kodu aşağıdadır:
using System;
// Change input document contents using Azure Cosmos DB input binding
public static void Run(string myQueueItem, dynamic inputDocument)
{
inputDocument.text = "This has changed.";
}
SqlQuery kullanarak kuyruk tetikleyicisi, birden çok belge alma
Aşağıdaki örnekte, bir function.json dosyasındaki Azure Cosmos DB giriş bağlaması ve bağlamayı kullanan bir C# betik işlevi gösterilmektedir. İşlev, sorgu parametrelerini özelleştirmek için bir kuyruk tetikleyicisi kullanarak SQL sorgusu tarafından belirtilen birden çok belgeyi alır.
Kuyruk tetikleyicisi bir parametresi departmentId
sağlar. kuyruk iletisi { "departmentId" : "Finance" }
, finans departmanı için tüm kayıtları döndürür.
function.json dosyasındaki bağlama verileri aşağıdadır:
{
"name": "documents",
"type": "documentdb",
"direction": "in",
"databaseName": "MyDb",
"collectionName": "MyCollection",
"sqlQuery": "SELECT * from c where c.departmentId = {departmentId}",
"connection": "CosmosDBConnection"
}
C# betik kodu aşağıdadır:
public static void Run(QueuePayload myQueueItem, IEnumerable<dynamic> documents)
{
foreach (var doc in documents)
{
// operate on each document
}
}
public class QueuePayload
{
public string departmentId { get; set; }
}
HTTP tetikleyicisi, sorgu dizesinden kimlik arama
Aşağıdaki örnekte, tek bir belgeyi alan bir C# betik işlevi gösterilmektedir. İşlev, bir sorgu dizesi kullanarak aranacak kimliği belirten bir HTTP isteği tarafından tetiklenir. Bu kimlik, belirtilen veritabanından ve koleksiyondan belge ToDoItem
almak için kullanılır.
İşte function.json dosyası:
{
"bindings": [
{
"authLevel": "anonymous",
"name": "req",
"type": "httpTrigger",
"direction": "in",
"methods": [
"get",
"post"
]
},
{
"name": "$return",
"type": "http",
"direction": "out"
},
{
"type": "documentDB",
"name": "toDoItem",
"databaseName": "ToDoItems",
"collectionName": "Items",
"connection": "CosmosDBConnection",
"direction": "in",
"Id": "{Query.id}"
}
],
"disabled": true
}
C# betik kodu aşağıdadır:
using System.Net;
public static HttpResponseMessage Run(HttpRequestMessage req, ToDoItem toDoItem, TraceWriter log)
{
log.Info("C# HTTP trigger function processed a request.");
if (toDoItem == null)
{
log.Info($"ToDo item not found");
}
else
{
log.Info($"Found ToDo item, Description={toDoItem.Description}");
}
return req.CreateResponse(HttpStatusCode.OK);
}
HTTP tetikleyicisi, rota verilerinden kimlik arama
Aşağıdaki örnekte, tek bir belgeyi alan bir C# betik işlevi gösterilmektedir. İşlev, arama kimliğini belirtmek için yol verilerini kullanan bir HTTP isteği tarafından tetikleniyor. Bu kimlik, belirtilen veritabanından ve koleksiyondan belge ToDoItem
almak için kullanılır.
İşte function.json dosyası:
{
"bindings": [
{
"authLevel": "anonymous",
"name": "req",
"type": "httpTrigger",
"direction": "in",
"methods": [
"get",
"post"
],
"route":"todoitems/{id}"
},
{
"name": "$return",
"type": "http",
"direction": "out"
},
{
"type": "documentDB",
"name": "toDoItem",
"databaseName": "ToDoItems",
"collectionName": "Items",
"connection": "CosmosDBConnection",
"direction": "in",
"Id": "{id}"
}
],
"disabled": false
}
C# betik kodu aşağıdadır:
using System.Net;
public static HttpResponseMessage Run(HttpRequestMessage req, ToDoItem toDoItem, TraceWriter log)
{
log.Info("C# HTTP trigger function processed a request.");
if (toDoItem == null)
{
log.Info($"ToDo item not found");
}
else
{
log.Info($"Found ToDo item, Description={toDoItem.Description}");
}
return req.CreateResponse(HttpStatusCode.OK);
}
SQLQuery kullanarak HTTP tetikleyicisi, birden çok belge alma
Aşağıdaki örnekte belgelerin listesini alan bir C# betik işlevi gösterilmektedir. İşlev bir HTTP isteği tarafından tetikleniyor. Sorgu öznitelik özelliğinde SqlQuery
belirtilir.
İşte function.json dosyası:
{
"bindings": [
{
"authLevel": "anonymous",
"name": "req",
"type": "httpTrigger",
"direction": "in",
"methods": [
"get",
"post"
]
},
{
"name": "$return",
"type": "http",
"direction": "out"
},
{
"type": "documentDB",
"name": "toDoItems",
"databaseName": "ToDoItems",
"collectionName": "Items",
"connection": "CosmosDBConnection",
"direction": "in",
"sqlQuery": "SELECT top 2 * FROM c order by c._ts desc"
}
],
"disabled": false
}
C# betik kodu aşağıdadır:
using System.Net;
public static HttpResponseMessage Run(HttpRequestMessage req, IEnumerable<ToDoItem> toDoItems, TraceWriter log)
{
log.Info("C# HTTP trigger function processed a request.");
foreach (ToDoItem toDoItem in toDoItems)
{
log.Info(toDoItem.Description);
}
return req.CreateResponse(HttpStatusCode.OK);
}
DOCUMENTClient kullanarak HTTP tetikleyicisi, birden çok belge alma
Aşağıdaki örnekte belgelerin listesini alan bir C# betik işlevi gösterilmektedir. İşlev bir HTTP isteği tarafından tetikleniyor. Kod, belge listesini okumak için Azure Cosmos DB bağlaması tarafından sağlanan bir örneği kullanır DocumentClient
. Örnek DocumentClient
, yazma işlemleri için de kullanılabilir.
İşte function.json dosyası:
{
"bindings": [
{
"authLevel": "anonymous",
"name": "req",
"type": "httpTrigger",
"direction": "in",
"methods": [
"get",
"post"
]
},
{
"name": "$return",
"type": "http",
"direction": "out"
},
{
"type": "documentDB",
"name": "client",
"databaseName": "ToDoItems",
"collectionName": "Items",
"connection": "CosmosDBConnection",
"direction": "inout"
}
],
"disabled": false
}
C# betik kodu aşağıdadır:
#r "Microsoft.Azure.Documents.Client"
using System.Net;
using Microsoft.Azure.Documents.Client;
using Microsoft.Azure.Documents.Linq;
public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, DocumentClient client, TraceWriter log)
{
log.Info("C# HTTP trigger function processed a request.");
Uri collectionUri = UriFactory.CreateDocumentCollectionUri("ToDoItems", "Items");
string searchterm = req.GetQueryNameValuePairs()
.FirstOrDefault(q => string.Compare(q.Key, "searchterm", true) == 0)
.Value;
if (searchterm == null)
{
return req.CreateResponse(HttpStatusCode.NotFound);
}
log.Info($"Searching for word: {searchterm} using Uri: {collectionUri.ToString()}");
IDocumentQuery<ToDoItem> query = client.CreateDocumentQuery<ToDoItem>(collectionUri)
.Where(p => p.Description.Contains(searchterm))
.AsDocumentQuery();
while (query.HasMoreResults)
{
foreach (ToDoItem result in await query.ExecuteNextAsync())
{
log.Info(result.Description);
}
}
return req.CreateResponse(HttpStatusCode.OK);
}
Azure Cosmos DB v1 çıkışı
Bu bölüm aşağıdaki örnekleri içerir:
- Kuyruk tetikleyicisi, bir belge yazma
- Kuyruk tetikleyicisi, kullanarak belge yazma
IAsyncCollector
Kuyruk tetikleyicisi, bir belge yazma
Aşağıdaki örnekte, bir function.json dosyasındaki Azure Cosmos DB çıkış bağlaması ve bağlamayı kullanan bir C# betik işlevi gösterilmektedir. İşlev, aşağıdaki biçimde JSON alan bir kuyruk için kuyruk giriş bağlaması kullanır:
{
"name": "John Henry",
"employeeId": "123456",
"address": "A town nearby"
}
İşlev, her kayıt için aşağıdaki biçimde Azure Cosmos DB belgeleri oluşturur:
{
"id": "John Henry-123456",
"name": "John Henry",
"employeeId": "123456",
"address": "A town nearby"
}
function.json dosyasındaki bağlama verileri aşağıdadır:
{
"name": "employeeDocument",
"type": "documentDB",
"databaseName": "MyDatabase",
"collectionName": "MyCollection",
"createIfNotExists": true,
"connection": "MyAccount_COSMOSDB",
"direction": "out"
}
C# betik kodu aşağıdadır:
#r "Newtonsoft.Json"
using Microsoft.Azure.WebJobs.Host;
using Newtonsoft.Json.Linq;
public static void Run(string myQueueItem, out object employeeDocument, TraceWriter log)
{
log.Info($"C# Queue trigger function processed: {myQueueItem}");
dynamic employee = JObject.Parse(myQueueItem);
employeeDocument = new {
id = employee.name + "-" + employee.employeeId,
name = employee.name,
employeeId = employee.employeeId,
address = employee.address
};
}
Kuyruk tetikleyicisi, IAsyncCollector kullanarak belge yazma
Birden çok belge oluşturmak için, desteklenen türlerden birine veya IAsyncCollector<T>
nereye T
bağlanabilirsinizICollector<T>
.
Bu örnek basit ToDoItem
bir türe başvurur:
namespace CosmosDBSamplesV1
{
public class ToDoItem
{
public string Id { get; set; }
public string Description { get; set; }
}
}
İşte function.json dosyası:
{
"bindings": [
{
"name": "toDoItemsIn",
"type": "queueTrigger",
"direction": "in",
"queueName": "todoqueueforwritemulti",
"connection": "AzureWebJobsStorage"
},
{
"type": "documentDB",
"name": "toDoItemsOut",
"databaseName": "ToDoItems",
"collectionName": "Items",
"connection": "CosmosDBConnection",
"direction": "out"
}
],
"disabled": false
}
C# betik kodu aşağıdadır:
using System;
public static async Task Run(ToDoItem[] toDoItemsIn, IAsyncCollector<ToDoItem> toDoItemsOut, TraceWriter log)
{
log.Info($"C# Queue trigger function processed {toDoItemsIn?.Length} items");
foreach (ToDoItem toDoItem in toDoItemsIn)
{
log.Info($"Description={toDoItem.Description}");
await toDoItemsOut.AddAsync(toDoItem);
}
}
Azure SQL tetikleyicisi
GitHub deposunda Azure SQL tetikleyicisi için daha fazla örnek mevcuttur.
Örnek bir ToDoItem
sınıfa ve buna karşılık gelen bir veritabanı tablosuna başvurur:
namespace AzureSQL.ToDo
{
public class ToDoItem
{
public Guid Id { get; set; }
public int? order { get; set; }
public string title { get; set; }
public string url { get; set; }
public bool? completed { get; set; }
}
}
CREATE TABLE dbo.ToDo (
[Id] UNIQUEIDENTIFIER PRIMARY KEY,
[order] INT NULL,
[title] NVARCHAR(200) NOT NULL,
[url] NVARCHAR(200) NOT NULL,
[completed] BIT NOT NULL
);
Değişiklik izleme , veritabanında ve tabloda etkinleştirilir:
ALTER DATABASE [SampleDatabase]
SET CHANGE_TRACKING = ON
(CHANGE_RETENTION = 2 DAYS, AUTO_CLEANUP = ON);
ALTER TABLE [dbo].[ToDo]
ENABLE CHANGE_TRACKING;
SQL tetikleyicisi, her biri SqlChange
iki özelliğe sahip nesnelerin bir listesine bağlanırIReadOnlyList<SqlChange<T>>
:
- Öğe: Değiştirilen öğe. Öğenin türü, sınıfında görüldüğü gibi tablo şemasını
ToDoItem
izlemelidir. - İşlem: sabit tablosundan
SqlChangeOperation
bir değer. Olası değerler:Insert
,Update
veDelete
.
Aşağıdaki örnekte, function.json dosyasındaki bir SQL tetikleyicisi ve tabloda değişiklikler ToDo
olduğunda çağrılan bir C# betik işlevi gösterilmektedir:
Function.json dosyasındaki verileri bağlama aşağıdadır:
{
"name": "todoChanges",
"type": "sqlTrigger",
"direction": "in",
"tableName": "dbo.ToDo",
"connectionStringSetting": "SqlConnectionString"
}
C# betik işlevi aşağıdadır:
#r "Newtonsoft.Json"
using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
public static void Run(IReadOnlyList<SqlChange<ToDoItem>> todoChanges, ILogger log)
{
log.LogInformation($"C# SQL trigger function processed a request.");
foreach (SqlChange<ToDoItem> change in todoChanges)
{
ToDoItem toDoItem = change.Item;
log.LogInformation($"Change operation: {change.Operation}");
log.LogInformation($"Id: {toDoItem.Id}, Title: {toDoItem.title}, Url: {toDoItem.url}, Completed: {toDoItem.completed}");
}
}
Azure SQL girişi
GitHub deposunda Azure SQL giriş bağlaması için daha fazla örnek mevcuttur.
Bu bölüm aşağıdaki örnekleri içerir:
Örnekler bir ToDoItem
sınıfa ve buna karşılık gelen bir veritabanı tablosuna başvurur:
namespace AzureSQL.ToDo
{
public class ToDoItem
{
public Guid Id { get; set; }
public int? order { get; set; }
public string title { get; set; }
public string url { get; set; }
public bool? completed { get; set; }
}
}
CREATE TABLE dbo.ToDo (
[Id] UNIQUEIDENTIFIER PRIMARY KEY,
[order] INT NULL,
[title] NVARCHAR(200) NOT NULL,
[url] NVARCHAR(200) NOT NULL,
[completed] BIT NOT NULL
);
HTTP tetikleyicisi, sorgu dizesinden kimliğine göre satır alma
Aşağıdaki örnekte, bir function.json dosyasındaki Azure SQL giriş bağlaması ve bağlamayı kullanan bir C# betik işlevi gösterilmektedir. İşlev, kimliği belirtmek için sorgu dizesi kullanan bir HTTP isteği tarafından tetikleniyor. Bu kimlik, belirtilen sorguya sahip bir ToDoItem
kaydı almak için kullanılır.
Not
HTTP sorgu dizesi parametresi büyük/küçük harfe duyarlıdır.
function.json dosyasındaki bağlama verileri aşağıdadır:
{
"authLevel": "anonymous",
"type": "httpTrigger",
"direction": "in",
"name": "req",
"methods": [
"get"
]
},
{
"type": "http",
"direction": "out",
"name": "res"
},
{
"name": "todoItem",
"type": "sql",
"direction": "in",
"commandText": "select [Id], [order], [title], [url], [completed] from dbo.ToDo where Id = @Id",
"commandType": "Text",
"parameters": "@Id = {Query.id}",
"connectionStringSetting": "SqlConnectionString"
}
C# betik kodu aşağıdadır:
#r "Newtonsoft.Json"
using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
using System.Collections.Generic;
public static IActionResult Run(HttpRequest req, ILogger log, IEnumerable<ToDoItem> todoItem)
{
return new OkObjectResult(todoItem);
}
HTTP tetikleyicisi, satırları silme
Aşağıdaki örnekte, function.json dosyasındaki bir Azure SQL giriş bağlaması ve HTTP isteği sorgu parametresinden giriş içeren bir saklı yordam yürütmek için bağlamayı kullanan bir C# betik işlevi gösterilmektedir. Bu örnekte saklı yordam, parametrenin değerine bağlı olarak tek bir kaydı veya tüm kayıtları siler.
Saklı yordam dbo.DeleteToDo
SQL veritabanında oluşturulmalıdır.
CREATE PROCEDURE [dbo].[DeleteToDo]
@Id NVARCHAR(100)
AS
DECLARE @UID UNIQUEIDENTIFIER = TRY_CAST(@ID AS UNIQUEIDENTIFIER)
IF @UId IS NOT NULL AND @Id != ''
BEGIN
DELETE FROM dbo.ToDo WHERE Id = @UID
END
ELSE
BEGIN
DELETE FROM dbo.ToDo WHERE @ID = ''
END
SELECT [Id], [order], [title], [url], [completed] FROM dbo.ToDo
GO
function.json dosyasındaki bağlama verileri aşağıdadır:
{
"authLevel": "anonymous",
"type": "httpTrigger",
"direction": "in",
"name": "req",
"methods": [
"get"
]
},
{
"type": "http",
"direction": "out",
"name": "res"
},
{
"name": "todoItems",
"type": "sql",
"direction": "in",
"commandText": "DeleteToDo",
"commandType": "StoredProcedure",
"parameters": "@Id = {Query.id}",
"connectionStringSetting": "SqlConnectionString"
}
using System;
using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
namespace AzureSQL.ToDo
{
public static class DeleteToDo
{
// delete all items or a specific item from querystring
// returns remaining items
// uses input binding with a stored procedure DeleteToDo to delete items and return remaining items
[FunctionName("DeleteToDo")]
public static IActionResult Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "delete", Route = "DeleteFunction")] HttpRequest req,
ILogger log,
[Sql(commandText: "DeleteToDo", commandType: System.Data.CommandType.StoredProcedure,
parameters: "@Id={Query.id}", connectionStringSetting: "SqlConnectionString")]
IEnumerable<ToDoItem> toDoItems)
{
return new OkObjectResult(toDoItems);
}
}
}
C# betik kodu aşağıdadır:
#r "Newtonsoft.Json"
using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
using System.Collections.Generic;
public static IActionResult Run(HttpRequest req, ILogger log, IEnumerable<ToDoItem> todoItems)
{
return new OkObjectResult(todoItems);
}
Azure SQL çıkışı
GitHub deposunda Azure SQL çıkış bağlaması için daha fazla örnek mevcuttur.
Bu bölüm aşağıdaki örnekleri içerir:
Örnekler bir ToDoItem
sınıfa ve buna karşılık gelen bir veritabanı tablosuna başvurur:
namespace AzureSQL.ToDo
{
public class ToDoItem
{
public Guid Id { get; set; }
public int? order { get; set; }
public string title { get; set; }
public string url { get; set; }
public bool? completed { get; set; }
}
}
CREATE TABLE dbo.ToDo (
[Id] UNIQUEIDENTIFIER PRIMARY KEY,
[order] INT NULL,
[title] NVARCHAR(200) NOT NULL,
[url] NVARCHAR(200) NOT NULL,
[completed] BIT NOT NULL
);
HTTP tetikleyicisi, tabloya kayıt yazma
Aşağıdaki örnekte, bir function.json dosyasındaki SQL çıkış bağlaması ve HTTP POST isteğinde JSON gövdesi olarak sağlanan verileri kullanarak bir tabloya kayıt ekleyen bir C# betik işlevi gösterilmektedir.
Function.json dosyasındaki verileri bağlama aşağıdadır:
{
"authLevel": "anonymous",
"type": "httpTrigger",
"direction": "in",
"name": "req",
"methods": [
"post"
]
},
{
"type": "http",
"direction": "out",
"name": "res"
},
{
"name": "todoItem",
"type": "sql",
"direction": "out",
"commandText": "dbo.ToDo",
"connectionStringSetting": "SqlConnectionString"
}
Aşağıda örnek C# betik kodu verilmiştir:
#r "Newtonsoft.Json"
using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
public static IActionResult Run(HttpRequest req, ILogger log, out ToDoItem todoItem)
{
log.LogInformation("C# HTTP trigger function processed a request.");
string requestBody = new StreamReader(req.Body).ReadToEnd();
todoItem = JsonConvert.DeserializeObject<ToDoItem>(requestBody);
return new OkObjectResult(todoItem);
}
HTTP tetikleyicisi, iki tabloya yazma
Aşağıdaki örnekte, bir function.json dosyasında sql çıkış bağlaması ve bir HTTP POST isteğinde JSON gövdesi ve birden çok çıkış bağlaması olarak sağlanan verileri kullanarak iki farklı tablodaki (dbo.ToDo
ve dbo.RequestLog
) bir veritabanına kayıt ekleyen bir C# betik işlevi gösterilmektedir.
İkinci tablo olan dbo.RequestLog
, aşağıdaki tanıma karşılık gelir:
CREATE TABLE dbo.RequestLog (
Id int identity(1,1) primary key,
RequestTimeStamp datetime2 not null,
ItemCount int not null
)
Function.json dosyasındaki verileri bağlama aşağıdadır:
{
"authLevel": "anonymous",
"type": "httpTrigger",
"direction": "in",
"name": "req",
"methods": [
"post"
]
},
{
"type": "http",
"direction": "out",
"name": "res"
},
{
"name": "todoItem",
"type": "sql",
"direction": "out",
"commandText": "dbo.ToDo",
"connectionStringSetting": "SqlConnectionString"
},
{
"name": "requestLog",
"type": "sql",
"direction": "out",
"commandText": "dbo.RequestLog",
"connectionStringSetting": "SqlConnectionString"
}
Aşağıda örnek C# betik kodu verilmiştir:
#r "Newtonsoft.Json"
using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
public static IActionResult Run(HttpRequest req, ILogger log, out ToDoItem todoItem, out RequestLog requestLog)
{
log.LogInformation("C# HTTP trigger function processed a request.");
string requestBody = new StreamReader(req.Body).ReadToEnd();
todoItem = JsonConvert.DeserializeObject<ToDoItem>(requestBody);
requestLog = new RequestLog();
requestLog.RequestTimeStamp = DateTime.Now;
requestLog.ItemCount = 1;
return new OkObjectResult(todoItem);
}
public class RequestLog {
public DateTime RequestTimeStamp { get; set; }
public int ItemCount { get; set; }
}
RabbitMQ çıkışı
Aşağıdaki örnekte, function.json dosyasında bir RabbitMQ çıkış bağlaması ve bağlamayı kullanan bir C# betik işlevi gösterilmektedir. İşlev, bir HTTP tetikleyicisinden iletide okur ve bunu RabbitMQ kuyruğuna gönderir.
function.json dosyasındaki bağlama verileri aşağıdadır:
{
"bindings": [
{
"type": "httpTrigger",
"direction": "in",
"authLevel": "function",
"name": "input",
"methods": [
"get",
"post"
]
},
{
"type": "rabbitMQ",
"name": "outputMessage",
"queueName": "outputQueue",
"connectionStringSetting": "rabbitMQConnectionAppSetting",
"direction": "out"
}
]
}
C# betik kodu aşağıdadır:
using System;
using Microsoft.Extensions.Logging;
public static void Run(string input, out string outputMessage, ILogger log)
{
log.LogInformation(input);
outputMessage = input;
}
SendGrid çıkışı
Aşağıdaki örnekte, bir function.json dosyasında sendGrid çıkış bağlaması ve bağlamayı kullanan bir C# betik işlevi gösterilmektedir.
function.json dosyasındaki bağlama verileri aşağıdadır:
{
"bindings": [
{
"type": "queueTrigger",
"name": "mymsg",
"queueName": "myqueue",
"connection": "AzureWebJobsStorage",
"direction": "in"
},
{
"type": "sendGrid",
"name": "$return",
"direction": "out",
"apiKey": "SendGridAPIKeyAsAppSetting",
"from": "{FromEmail}",
"to": "{ToEmail}"
}
]
}
C# betik kodu aşağıdadır:
#r "SendGrid"
using System;
using SendGrid.Helpers.Mail;
using Microsoft.Azure.WebJobs.Host;
public static SendGridMessage Run(Message mymsg, ILogger log)
{
SendGridMessage message = new SendGridMessage()
{
Subject = $"{mymsg.Subject}"
};
message.AddContent("text/plain", $"{mymsg.Content}");
return message;
}
public class Message
{
public string ToEmail { get; set; }
public string FromEmail { get; set; }
public string Subject { get; set; }
public string Content { get; set; }
}
SignalR tetikleyicisi
function.json dosyasındaki verileri bağlama örneği aşağıda verilmişti:
{
"type": "signalRTrigger",
"name": "invocation",
"hubName": "SignalRTest",
"category": "messages",
"event": "SendMessage",
"parameterNames": [
"message"
],
"direction": "in"
}
Kod şu şekildedir:
#r "Microsoft.Azure.WebJobs.Extensions.SignalRService"
using System;
using Microsoft.Azure.WebJobs.Extensions.SignalRService;
using Microsoft.Extensions.Logging;
public static void Run(InvocationContext invocation, string message, ILogger logger)
{
logger.LogInformation($"Receive {message} from {invocationContext.ConnectionId}.");
}
SignalR girişi
Aşağıdaki örnekte, bir function.json dosyasında SignalR bağlantı bilgileri giriş bağlaması ve bağlantı bilgilerini döndürmek için bağlamayı kullanan bir C# Betiği işlevi gösterilmektedir.
function.json dosyasındaki bağlama verileri aşağıdadır:
Örnek function.json:
{
"type": "signalRConnectionInfo",
"name": "connectionInfo",
"hubName": "chat",
"connectionStringSetting": "<name of setting containing SignalR Service connection string>",
"direction": "in"
}
C# Betik kodu şu şekildedir:
#r "Microsoft.Azure.WebJobs.Extensions.SignalRService"
using Microsoft.Azure.WebJobs.Extensions.SignalRService;
public static SignalRConnectionInfo Run(HttpRequest req, SignalRConnectionInfo connectionInfo)
{
return connectionInfo;
}
Bağlama özelliğini bir bağlama ifadesi kullanarak üst bilgiden değere ayarlayabilirsinizuserId
: {headers.x-ms-client-principal-id}
veya {headers.x-ms-client-principal-name}
.
Örnek function.json:
{
"type": "signalRConnectionInfo",
"name": "connectionInfo",
"hubName": "chat",
"userId": "{headers.x-ms-client-principal-id}",
"connectionStringSetting": "<name of setting containing SignalR Service connection string>",
"direction": "in"
}
C# Betik kodu şu şekildedir:
#r "Microsoft.Azure.WebJobs.Extensions.SignalRService"
using Microsoft.Azure.WebJobs.Extensions.SignalRService;
public static SignalRConnectionInfo Run(HttpRequest req, SignalRConnectionInfo connectionInfo)
{
// connectionInfo contains an access key token with a name identifier
// claim set to the authenticated user
return connectionInfo;
}
SignalR çıkışı
function.json dosyasındaki bağlama verileri aşağıdadır:
Örnek function.json:
{
"type": "signalR",
"name": "signalRMessages",
"hubName": "<hub_name>",
"connectionStringSetting": "<name of setting containing SignalR Service connection string>",
"direction": "out"
}
C# Betik kodu şu şekildedir:
#r "Microsoft.Azure.WebJobs.Extensions.SignalRService"
using Microsoft.Azure.WebJobs.Extensions.SignalRService;
public static Task Run(
object message,
IAsyncCollector<SignalRMessage> signalRMessages)
{
return signalRMessages.AddAsync(
new SignalRMessage
{
Target = "newMessage",
Arguments = new [] { message }
});
}
SignalR iletisinde kullanıcı kimliğini ayarlayarak yalnızca bir kullanıcıya kimliği doğrulanmış bağlantılara ileti gönderebilirsiniz.
Örnek function.json:
{
"type": "signalR",
"name": "signalRMessages",
"hubName": "<hub_name>",
"connectionStringSetting": "<name of setting containing SignalR Service connection string>",
"direction": "out"
}
C# betik kodu aşağıdadır:
#r "Microsoft.Azure.WebJobs.Extensions.SignalRService"
using Microsoft.Azure.WebJobs.Extensions.SignalRService;
public static Task Run(
object message,
IAsyncCollector<SignalRMessage> signalRMessages)
{
return signalRMessages.AddAsync(
new SignalRMessage
{
// the message will only be sent to this user ID
UserId = "userId1",
Target = "newMessage",
Arguments = new [] { message }
});
}
SignalR iletisindeki grup adını ayarlayarak yalnızca gruba eklenmiş bağlantılara ileti gönderebilirsiniz.
Örnek function.json:
{
"type": "signalR",
"name": "signalRMessages",
"hubName": "<hub_name>",
"connectionStringSetting": "<name of setting containing SignalR Service connection string>",
"direction": "out"
}
C# Betik kodu şu şekildedir:
#r "Microsoft.Azure.WebJobs.Extensions.SignalRService"
using Microsoft.Azure.WebJobs.Extensions.SignalRService;
public static Task Run(
object message,
IAsyncCollector<SignalRMessage> signalRMessages)
{
return signalRMessages.AddAsync(
new SignalRMessage
{
// the message will be sent to the group with this name
GroupName = "myGroup",
Target = "newMessage",
Arguments = new [] { message }
});
}
SignalR Hizmeti, kullanıcıların veya bağlantıların gruplara eklenmesine izin verir. Daha sonra iletiler bir gruba gönderilebilir. Grupları yönetmek için çıkış bağlamasını SignalR
kullanabilirsiniz.
Aşağıdaki örnek bir gruba kullanıcı ekler.
Örnek function.json
{
"type": "signalR",
"name": "signalRGroupActions",
"connectionStringSetting": "<name of setting containing SignalR Service connection string>",
"hubName": "chat",
"direction": "out"
}
Run.csx
#r "Microsoft.Azure.WebJobs.Extensions.SignalRService"
using Microsoft.Azure.WebJobs.Extensions.SignalRService;
public static Task Run(
HttpRequest req,
ClaimsPrincipal claimsPrincipal,
IAsyncCollector<SignalRGroupAction> signalRGroupActions)
{
var userIdClaim = claimsPrincipal.FindFirst(ClaimTypes.NameIdentifier);
return signalRGroupActions.AddAsync(
new SignalRGroupAction
{
UserId = userIdClaim.Value,
GroupName = "myGroup",
Action = GroupAction.Add
});
}
Aşağıdaki örnek, bir kullanıcıyı gruptan kaldırır.
Örnek function.json
{
"type": "signalR",
"name": "signalRGroupActions",
"connectionStringSetting": "<name of setting containing SignalR Service connection string>",
"hubName": "chat",
"direction": "out"
}
Run.csx
#r "Microsoft.Azure.WebJobs.Extensions.SignalRService"
using Microsoft.Azure.WebJobs.Extensions.SignalRService;
public static Task Run(
HttpRequest req,
ClaimsPrincipal claimsPrincipal,
IAsyncCollector<SignalRGroupAction> signalRGroupActions)
{
var userIdClaim = claimsPrincipal.FindFirst(ClaimTypes.NameIdentifier);
return signalRGroupActions.AddAsync(
new SignalRGroupAction
{
UserId = userIdClaim.Value,
GroupName = "myGroup",
Action = GroupAction.Remove
});
}
Twilio çıkışı
Aşağıdaki örnekte, bir function.json dosyasındaki Twilio çıkış bağlaması ve bağlamayı kullanan bir C# betik işlevi gösterilmektedir. işlevi, kısa mesaj göndermek için bir out
parametre kullanır.
function.json dosyasındaki bağlama verileri aşağıdadır:
Örnek function.json:
{
"type": "twilioSms",
"name": "message",
"accountSidSetting": "TwilioAccountSid",
"authTokenSetting": "TwilioAuthToken",
"from": "+1425XXXXXXX",
"direction": "out",
"body": "Azure Functions Testing"
}
C# betik kodu aşağıdadır:
#r "Newtonsoft.Json"
#r "Twilio"
#r "Microsoft.Azure.WebJobs.Extensions.Twilio"
using System;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Microsoft.Azure.WebJobs.Extensions.Twilio;
using Twilio.Rest.Api.V2010.Account;
using Twilio.Types;
public static void Run(string myQueueItem, out CreateMessageOptions message, ILogger log)
{
log.LogInformation($"C# Queue trigger function processed: {myQueueItem}");
// In this example the queue item is a JSON string representing an order that contains the name of a
// customer and a mobile number to send text updates to.
dynamic order = JsonConvert.DeserializeObject(myQueueItem);
string msg = "Hello " + order.name + ", thank you for your order.";
// You must initialize the CreateMessageOptions variable with the "To" phone number.
message = new CreateMessageOptions(new PhoneNumber("+1704XXXXXXX"));
// A dynamic message can be set instead of the body in the output binding. In this example, we use
// the order information to personalize a text message.
message.Body = msg;
}
Zaman uyumsuz kodda out parametrelerini kullanamazsınız. Zaman uyumsuz bir C# betik kodu örneği aşağıda verilmiştir:
#r "Newtonsoft.Json"
#r "Twilio"
#r "Microsoft.Azure.WebJobs.Extensions.Twilio"
using System;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Microsoft.Azure.WebJobs.Extensions.Twilio;
using Twilio.Rest.Api.V2010.Account;
using Twilio.Types;
public static async Task Run(string myQueueItem, IAsyncCollector<CreateMessageOptions> message, ILogger log)
{
log.LogInformation($"C# Queue trigger function processed: {myQueueItem}");
// In this example the queue item is a JSON string representing an order that contains the name of a
// customer and a mobile number to send text updates to.
dynamic order = JsonConvert.DeserializeObject(myQueueItem);
string msg = "Hello " + order.name + ", thank you for your order.";
// You must initialize the CreateMessageOptions variable with the "To" phone number.
CreateMessageOptions smsText = new CreateMessageOptions(new PhoneNumber("+1704XXXXXXX"));
// A dynamic message can be set instead of the body in the output binding. In this example, we use
// the order information to personalize a text message.
smsText.Body = msg;
await message.AddAsync(smsText);
}
Isınma tetikleyicisi
Aşağıdaki örnekte, function.json dosyasındaki bir ısınma tetikleyicisi ve uygulamanıza eklendiğinde her yeni örnekte çalışan bir C# betik işlevi gösterilmektedir.
İşlevler çalışma zamanının 1.x sürümü için desteklenmez.
İşte function.json dosyası:
{
"bindings": [
{
"type": "warmupTrigger",
"direction": "in",
"name": "warmupContext"
}
]
}
public static void Run(WarmupContext warmupContext, ILogger log)
{
log.LogInformation("Function App instance is warm.");
}