Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
C# dilinde durum bilgisi olan sunucusuz iş akışları yazmak için Azure İşlevleri özelliği olan Dayanıklı İşlevler kullanın. Bu hızlı başlangıçta işlev zincirleme düzenleme düzenini gösteren örnek bir uygulamayı kopyalayıp çalıştıracaksınız:
- İşlev zinciri: Etkinlikleri sırayla çağırır (Tokyo → Seattle → Londra).
Sonunda, orkestrasyonu Durable Task Scheduler öykünücüsüyle yerel ortamda çalıştırabiliyor ve durumunu gösterge panelinde görüntüleyebiliyor olacaksınız.
- Hello Cities örnek projesini kopyalayın ve hazırlayın.
- Yerel geliştirme için Durable Task Scheduler öykünücüsünü ve Azurite'yi kurup yapılandırın.
- İşlev uygulamasını derleyip çalıştırın ve orkestrasyonu tetikleyin.
- Dayanıklı Görev Zamanlayıcı panosunda düzenleme durumunu ve çıktıyı gözden geçirin.
Prerequisites
- .NET 8 SDK veya üzeri yüklü.
- Azure İşlevleri Core Tools v4 veya üzeri.
- Öykünücüyü ve Azurite'yi çalıştırmak için Docker.
- Hızlı başlangıç örneğini kullanmak için Dayanıklı Görev Zamanlayıcı GitHub deposunu kopyalayın.
Dayanıklı Görev Zamanlayıcı öykünücüsünü ayarlayın
Durable Task Scheduler emulator, Azure aboneliği olmadan düzenleme iş akışlarını test edebilmeniz için yerel bir geliştirme ortamı sunar. .NET İşlevleri konağı ayrıca yerel depolama için Azurite gerektirir.
Her iki kapsayıcıyı da başlatın:
docker run -d --name dtsemulator -p 8080:8080 -p 8082:8082 \
mcr.microsoft.com/dts/dts-emulator:latest
docker run -d --name azurite -p 10000:10000 -p 10001:10001 -p 10002:10002 \
mcr.microsoft.com/azure-storage/azurite
Tavsiye
Öykünücü çalıştırıldıktan sonra, düzenlemeleri izlemek için adresindeki http://localhost:8082 Dayanıklı Görev Zamanlayıcı panosuna erişebilirsiniz.
Hızlı başlangıç örneğini çalıştırma
Hello Cities örnek dizinine gidin:
cd samples/durable-functions/dotnet/HelloCities/httpEmülatör yapılandırmasını içeren bir
local.settings.jsondosyası oluşturun:{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated", "DURABLE_TASK_SERVICE_CONNECTION_STRING": "Endpoint=http://localhost:8080;TaskHub=default;Authentication=None", "TASKHUB_NAME": "default" } }Projeyi oluşturun:
dotnet buildİşlev uygulamasını başlatın:
func startAyrı bir terminalde düzenlemeyi tetikleyin:
$response = Invoke-RestMethod -Method POST -Uri http://localhost:7071/api/DurableFunctionsOrchestrationCSharp1_HttpStart $responseYanıt, düzenleme örneğinin durum URL'lerini içerir.
statusQueryGetUriDeğeri kopyalayın ve çalıştırarak sonucu denetleyin:Invoke-RestMethod -Uri $response.statusQueryGetUri
Beklenen çıkış
POST isteği durum URL'lerine sahip bir JSON yanıtı döndürür. Örneğin:
{
"id": "<instanceId>",
"statusQueryGetUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/<instanceId>?code=...",
"sendEventPostUri": "...",
"terminatePostUri": "...",
"purgeHistoryDeleteUri": "..."
}
statusQueryGetUri’yu sorguladığınızda ve orkestrasyonun runtimeStatus değeri Completed olduğunda, karşılama sonuçlarını output alanında bulabilirsiniz:
{
"name": "DurableFunctionsOrchestrationCSharp1",
"runtimeStatus": "Completed",
"output": ["Hello Tokyo!", "Hello Seattle!", "Hello London!"]
}
Tavsiye
runtimeStatus, Running veya Pending gösteriyorsa bir süre bekleyin ve statusQueryGetUri’ü yeniden sorgulayın.
Orkestrasyon durumunu ve yürütme geçmişini görüntülemek için http://localhost:8082 konumundaki Durable Task Scheduler panosunu açın.
Kodu anlama
DurableFunctionsOrchestrationCSharp1.cs'daki örnek proje, bir Dayanıklı İşlevler uygulaması için gereken üç işlev türünün tümünü içerir.
Aktivite işlevi
SayHello etkinliği bir şehir adı alır ve bir selamlama iletisi döndürür:
[Function(nameof(SayHello))]
public static string SayHello([ActivityTrigger] string name, FunctionContext executionContext)
{
ILogger logger = executionContext.GetLogger("SayHello");
logger.LogInformation("Saying hello to {name}.", name);
return $"Hello {name}!";
}
Orchestrator işlevi
Orkestratör, üç şehir için SayHello öğesini sırayla çağırır:
[Function(nameof(DurableFunctionsOrchestrationCSharp1))]
public static async Task<List<string>> RunOrchestrator(
[OrchestrationTrigger] TaskOrchestrationContext context)
{
ILogger logger = context.CreateReplaySafeLogger(nameof(DurableFunctionsOrchestrationCSharp1));
logger.LogInformation("Saying hello.");
var outputs = new List<string>();
outputs.Add(await context.CallActivityAsync<string>(nameof(SayHello), "Tokyo"));
outputs.Add(await context.CallActivityAsync<string>(nameof(SayHello), "Seattle"));
outputs.Add(await context.CallActivityAsync<string>(nameof(SayHello), "London"));
return outputs;
}
İstemci işlevi
HTTP ile tetiklenen istemci işlevi düzenlemeyi başlatır:
[Function("DurableFunctionsOrchestrationCSharp1_HttpStart")]
public static async Task<HttpResponseData> HttpStart(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequestData req,
[DurableClient] DurableTaskClient client,
FunctionContext executionContext)
{
ILogger logger = executionContext.GetLogger("DurableFunctionsOrchestrationCSharp1_HttpStart");
string instanceId = await client.ScheduleNewOrchestrationInstanceAsync(
nameof(DurableFunctionsOrchestrationCSharp1));
logger.LogInformation("Started orchestration with ID = '{instanceId}'.", instanceId);
return await client.CreateCheckStatusResponseAsync(req, instanceId);
}
Configuration
Örnek, depolama altyapısı olarak Durable Task Scheduler emülatörünü kullanır. Bu, host.json içinde yapılandırılır:
{
"version": "2.0",
"extensions": {
"durableTask": {
"storageProvider": {
"type": "azureManaged",
"connectionStringName": "DURABLE_TASK_SERVICE_CONNECTION_STRING"
},
"hubName": "%TASKHUB_NAME%"
}
}
}
Öykünücünün bağlantı dizesi ve görev merkezi adı local.settings.json içinde ayarlanır:
{
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
"DURABLE_TASK_SERVICE_CONNECTION_STRING": "Endpoint=http://localhost:8080;TaskHub=default;Authentication=None",
"TASKHUB_NAME": "default"
}
}
Kaynakları temizle
İşiniz bittiğinde emülatör kapsayıcılarını durdurun:
docker stop dtsemulator azurite && docker rm dtsemulator azurite
Sonraki Adımlar
- common Dayanıklı İşlevler uygulama desenleri hakkında bilgi edinin.
- Dayanıklı İşlevler depolama sağlayıcıları hakkında bilgi edinin.