إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
يحتوي Durable Functions على عدة ميزات تجعل من السهل دمج التنسيقات والكيانات الدائمة في سير عمل HTTP. تتناول هذه المقالة تفاصيل عن بعض هذه الميزات.
الكشف عن واجهات برمجة التطبيقات HTTP
يمكن استدعاء التزامنات والكيانات وإدارتها باستخدام طلبات HTTP. يعرض امتداد Durable Functions واجهات برمجة تطبيقات HTTP مدمجة. كما يوفر واجهات برمجة التطبيقات للتفاعل مع التزامن والكيانات من داخل الوظائف التي يتم تشغيلها بواسطة HTTP.
واجهات برمجة التطبيقات HTTP المضمنة
تضيف إضافة Durable Functions تلقائيا مجموعة من واجهات برمجة تطبيقات HTTP إلى مضيف Azure Functions. بواجهات برمجة التطبيقات يمكنك التفاعل مع التزامن والكيانات وإدارتها دون كتابة أي رمز.
يتم دعم واجهات برمجة تطبيقات HTTP المضمنة التالية.
- ابدأ التوزيع الأوركسترالي الجديد
- استعلام حالة التنسيق
- إنهاء حالة التوزيع الموسيقي
- إرسال حدث خارجي إلى التوزيع الأوركسترالي
- تاريخ توزيع التطهير
- إرسال حدث عملية إلى كيان
- احصل على حالة الكيان
- استعلام قائمة الكيانات
راجع مقالة HTTP APIs لوصف كامل لجميع واجهات برمجة التطبيقات المدمجة التي يعرضها Durable Functions الإضافي.
اكتشاف عنوان URL لواجهة برمجة التطبيقات لـHTTP
يعرض ربط عميل التنسيق واجهات برمجة تطبيقات يمكنها توليد حمولات استجابة HTTP مريحة. على سبيل المثال، يمكن إنشاء استجابة تحتوي على ارتباطات إلى إدارة واجهات برمجة التطبيقات لمثيل تزامن معين. تظهر الأمثلة التالية وظيفة مشغل HTTP يوضح كيفية استخدام API هذا لمثيل تزامن جديد:
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the MIT License. See LICENSE in the project root for license information.
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.DurableTask;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Extensions.Logging;
namespace VSSample
{
public static class HttpStart
{
[FunctionName("HttpStart")]
public static async Task<HttpResponseMessage> Run(
[HttpTrigger(AuthorizationLevel.Function, methods: "post", Route = "orchestrators/{functionName}")] HttpRequestMessage req,
[DurableClient] IDurableClient starter,
string functionName,
ILogger log)
{
// Function input comes from the request content.
object eventData = await req.Content.ReadAsAsync<object>();
string instanceId = await starter.StartNewAsync(functionName, eventData);
log.LogInformation($"Started orchestration with ID = '{instanceId}'.");
return starter.CreateCheckStatusResponse(req, instanceId);
}
}
}
نصيحة
إذا كان لديك عدة دوال بدء مفعلة عبر HTTP في نفس تطبيق الوظائف، قم بتكوين وظيفة فريدة route لكل وظيفة لتجنب تعارضات المسارات. استخدام مسار مميز مثل orchestrators/{functionName} (كما هو موضح في عدة أمثلة سابقة) يسمح لدالة بداية HTTP واحدة ببدء أي منسق بالاسم، وهو غالبا أبسط طريقة.
ابدأ تشغيل وظيفة تزامن باستخدام مشغل وظائف HTTP توضح سابقًا ما يمكن القيام به باستخدام أي عميل HTTP. يبدأ الأمر التالي cURL دالة منسق باسم DoWork:
curl -X POST https://localhost:7071/orchestrators/DoWork -H "Content-Length: 0" -i
التالي هو مثال على استجابة لتوزيع موسيقي له abc123 معرف (ID). تمت إزالة بعض التفاصيل للوضوح.
HTTP/1.1 202 Accepted
Content-Type: application/json; charset=utf-8
Location: http://localhost:7071/runtime/webhooks/durabletask/instances/abc123?code=XXX
Retry-After: 10
{
"id": "abc123",
"purgeHistoryDeleteUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/abc123?code=XXX",
"sendEventPostUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/abc123/raiseEvent/{eventName}?code=XXX",
"statusQueryGetUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/abc123?code=XXX",
"terminatePostUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/abc123/terminate?reason={text}&code=XXX"
}
في المثال السابق، كل حقل ينتهي ب Uri يتوافق مع واجهة برمجة تطبيقات HTTP مدمجة. يمكنك استخدام واجهات برمجة التطبيقات لإدارة نموذج هدف التزامن.
ملحوظة
يعتمد تنسيق عناوين webhook على النسخة التي تستخدمها من مضيف Azure Functions. المثال السابق هو لمضيف Azure Functions 2.0.
للحصول على وصف لجميع واجهات برمجة تطبيقات HTTP المدمجة، راجع مرجع واجهة برمجة تطبيقات HTTP.
تعقب عملية التزامن
استجابة HTTP المذكورة سابقا مصممة للمساعدة في تنفيذ واجهات برمجة تطبيقات غير متزامنة طويلة الأمد من نوع HTTP باستخدام Durable Functions. يشار إلى هذا النمط أحيانا باسم نمط استطلاعات المستهلك. يعمل تدفق العميل / الخادم على النحو التالي:
- تتطلب مشاكل العميل بدء عملية HTTP طويلة الأجل مثل وظيفة منسق.
- يعود الهدف من مشغل HTTP إرجاع استجابة202 HTTP بعنوان موقع يحتوي على القيمة "statusQueryGetUri".
- يقوم العميل باستطلاعات محدد مواقع ويب في عنوان الموقع. يستمر العميل في مشاهدة استجابات HTTP 202 بعنوان موقع.
- عند انتهاء المثيل أو فشله، ترجع نقطة النهاية في عنوان الموقع HTTP 200.
يسمح هذا البروتوكول بتنسيق العمليات طويلة الأمد مع العملاء أو الخدمات الخارجية التي يمكنها الاستقصاء عن نقطة نهاية HTTP واتباع عنوان الموقع. كل من تطبيقات العميل والخادم لهذا النمط مدمجة في واجهات برمجة تطبيقات Durable Functions HTTP.
ملحوظة
افتراضيا، جميع الإجراءات القائمة على HTTP التي يوفرها Azure Logic Apps تدعم نمط التشغيل غير المتزامن القياسي. تتيح هذه الإمكانية تضمين وظيفة دائمة طويلة الأمد كجزء من سير عمل Logic Apps. يمكنك العثور على مزيد من التفاصيل حول دعم تطبيقات المنطق لأنماط HTTP غير المتزامنة في إجراءات سير العمل Azure Logic Apps ووثائق التفعيلات.
ملحوظة
يمكن إجراء التفاعلات مع التزامنات من أي نوع وظيفة، وليس فقط تشغيل الوظائف لـHTTP.
لمزيد من المعلومات حول كيفية إدارة التنسيقات والكيانات باستخدام واجهات برمجة التطبيقات الخاصة بالعميل، راجع مقالة إدارة المشاكل.
استخدام واجهات برمجة التطبيقات لـHTTP
كما هو موضح في قيود كود الأوركستراتور، لا يمكن لوظائف الأوركستراتور تنفيذ الإدخال/الإخراج مباشرة. بدلا من ذلك، عادة ما يسمون أنشطة تقوم بعمليات الإدخال/الإخراج.
بدءا من Durable Functions 2.0، يمكن للتنسيقات التنسيقية استهلاك واجهات برمجة تطبيقات HTTP بشكل أصلي باستخدام ><ربط محفز التنسيق.
يوضح المثال التالي وظائف التعليمات البرمجية لإجراء طلب لـHTTP صادر
[FunctionName(nameof(CheckSiteAvailable))]
public static async Task CheckSiteAvailable(
[OrchestrationTrigger] IDurableOrchestrationContext context)
{
Uri url = context.GetInput<Uri>();
// Makes an HTTP GET request to the specified endpoint
DurableHttpResponse response =
await context.CallHttpAsync(HttpMethod.Get, url);
if (response.StatusCode >= 400)
{
// handling of error codes goes here
}
}
ملحوظة
قد تتساءل لماذا تستخدم هذه الميزة أنواع DurableHttpRequest و DurableHttpResponse بدلا من الأنواع المدمجة .NET HttpRequestMessage وHttpResponseMessage.
التصميم المختار هذا مقصود. السبب الأساسي هو أن الأنواع المخصصة تساعد على التأكد من عدم قيام المستخدمين بإجراء افتراضات غير صحيحة حول السلوكيات مدعمة لعميل HTTP الداخلي. الأنواع الخاصة ب Durable Functions تتيح أيضا تبسيط تصميم واجهات برمجة التطبيقات. كما يمكنهم توفير ميزات خاصة مثل تكامل الهوية المدارةونمط استطلاعات المستهلك بسهولة أكبر.
باستخدام إجراء "استدعاء HTTP"، يمكن القيام بالإجراءات التالية في وظائف التزامن الخاصة بك:
- يمكنك استدعاء واجهات برمجة التطبيقات لـ HTTP مباشرة من وظائف التزامن مع بعض القيود المذكورة لاحقًا.
- دعم أنماط استقصاء حالة HTTP 202 من جانب العميل تلقائيًا.
- استخدم Azure Managed Identities لإجراء استدعاءات HTTP مصرح بها إلى نقاط نهاية Azure أخرى.
تهدف القدرة على استهلاك واجهات برمجة تطبيقات HTTP مباشرة من وظائف المنسق إلى استخدام مجموعة معينة من السيناريوهات الشائعة بطريقة ملائمة. يمكنك تنفيذ كافة هذه الميزات بنفسك باستخدام وظائف النشاط. في كثير من الحالات، قد تمنحك وظائف النشاط مرونة أكبر.
معالجة HTTP 202 (.NET فقط)
يمكن واجهة برمجة التطبيقات "استدعاء لـ HTTP" تنفيذ جانب العميل لنمط تحقق المستهلك إذا قامت واجهة برمجة التطبيقات التي تم استدعؤها بإرجاع استجابة HTT 202 بعنوان الوقع تقوم وظيفة المنسق تلقائيًا باستقصاء مورد الموقع حتى تلقي استجابة بخلاف ل 202. ستكون هذه الاستجابة هي الاستجابة التي يتم إرجاعها إلى رمز وظيفة المنسق.
[FunctionName(nameof(CheckSiteAvailabilityWithPolling))]
public static async Task CheckSiteAvailabilityWithPolling(
[OrchestrationTrigger] IDurableOrchestrationContext context)
{
Uri url = context.GetInput<Uri>();
// HTTP automatic polling on 202 response is enabled by default in .NET in-process.
DurableHttpResponse response =
await context.CallHttpAsync(HttpMethod.Get, url);
}
ملحوظة
- تدعم وظائف التنسيق أيضا بشكل أصلي نمط استطلاع المستهلك على جانب الخادم، كما هو موضح في تتبع العمليات غير المتزامن. يعني هذا الدعم أن التزامن في تطبيق وظيفة واحده يمكنه بسهولة تنسيق وظائف التزامن في تطبيقات الوظائف الأخرى. هذا مشابه لمفهوم التوزيع الفرعي ، لكنه يدعم التواصل عبر التطبيقات. هذا الدعم مفيد بشكل خاص لتطوير التطبيقات على نمط الخدمات الصغيرة.
- نمط استطلاع HTTP المدمج متوفر حاليا فقط في مضيف .NET.
- يتم تفعيل نمط الاستطلاع افتراضيا في وضع .NET أثناء العملية، لكنه معطل افتراضيا في وضع .NET المعزول. إذا أردت تفعيله في .NET Isolated، راجع الكود النموذجي وقم بتعيين وسيط asynchronousPatternEnabled على true.
- يتم دعم نمط الاستطلاع التلقائي HTTP في Durable Functions .NET معزول بدءا من الإصدار v1.5.0 أو أحدث.
الهويات المُدارة
يدعم Durable Functions بشكل أصلي استدعاءات واجهات برمجة التطبيقات التي تقبل رموز Microsoft Entra للتفويض. يستخدم هذا الدعم Azure الهويات المدارة للحصول على هذه الرموز.
التعليمات البرمجية التالية مثال على وظيفة التزامن. تقوم هذه الوظيفة بإجراء مكالمات مصادقة لإعادة تشغيل آلة افتراضية باستخدام واجهة برمجة تطبيقات Azure Resource Manager الماكينات الافتراضية REST.
[FunctionName("RestartVm")]
public static async Task RunOrchestrator(
[OrchestrationTrigger] IDurableOrchestrationContext context)
{
string subscriptionId = "mySubId";
string resourceGroup = "myRG";
string vmName = "myVM";
string apiVersion = "2019-03-01";
// Automatically fetches an Azure AD token for resource = https://management.core.windows.net/.default
// and attaches it to the outgoing Azure Resource Manager API call.
var restartRequest = new DurableHttpRequest(
HttpMethod.Post,
new Uri($"https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Compute/virtualMachines/{vmName}/restart?api-version={apiVersion}"),
tokenSource: new ManagedIdentityTokenSource("https://management.core.windows.net/.default"));
DurableHttpResponse restartResponse = await context.CallHttpAsync(restartRequest);
if (restartResponse.StatusCode != HttpStatusCode.OK)
{
throw new ArgumentException($"Failed to restart VM: {restartResponse.StatusCode}: {restartResponse.Content}");
}
}
في المثال السابق، تم تكوين معامل tokenSource لاكتساب Microsoft Entra رموز ل Azure Resource Manager. يتم تحديد الرموز بواسطة المورد URI https://management.core.windows.net/.default. يفترض المثال أن تطبيق الوظيفة الحالي إما يعمل محليًا أو تم نشره كدارة ذات هوية مدارة. يفترض أن الهوية المحلية أو الهوية المدارة لديها إذن لإدارة الأجهزة الافتراضية في مجموعة myRGالموارد المحددة .
في وقت التشغيل، مصدر الرمز المميز المكون تلقائيا بإرجاع رمز مميز للوصول OAuth 2.0. المصدر ثم يضيف الرمز المميز كرمز مميز للحامل إلى تحويل العنوان الطلب الصادر. هذا الطراز هو تحسين عبر إضافة عناوين التخويل يدويا إلى طلبات HTTP للأسباب التالية:
- تتم معالجة تحديث الرمز المميز تلقائيا. لا داعي للقلق بشأن الرموز منتهية الصلاحية.
- لا يتم تخزين الرموز المميزة في حالة التزامن الدائم.
- لا تحتاج إلى كتابة أي تعليمة برمجية لإدارة اكتساب الرمز المميز.
يمكنك العثور على مثال أكثر اكتمالا في نموذج نماذج إعادة التشغيل الجاهزة
الهويات المدارة ليست مقتصرة على إدارة موارد Azure. يمكنك استخدام الهويات المدارة للوصول إلى أي واجهة برمجة تطبيقات تقبل رموز حامل Microsoft Entra، بما في ذلك خدمات Azure من مايكروسوفت وتطبيقات الويب من الشركاء. يمكن أن يكون تطبيق الويب الخاص بالشركاء تطبيقا آخر للوظيفة. للحصول على قائمة بخدمات Azure من مايكروسوفت التي تدعم المصادقة باستخدام Microsoft Entra ID، راجع Azure الخدمات التي تدعم Microsoft Entra المصادقة.
القيود
يعد الدعم المدمج لاستدعاء واجهات برمجة تطبيقات HTTP ميزة ملائمة. إنها ليست مناسبة لجميع السيناريوهات.
طلبات HTTP المرسلة من قبل وظائف المنسق وردودها تسلسلي ومستمرة كرسائل في مزود التخزين Durable Functions. يضمن هذا السلوك المستمر في الطابور أن مكالمات HTTP موثوقة وآمنة لإعادة تشغيل التنسيق. ومع ذلك، فإن سلوك الانتظار المستمر له أيضًا قيود:
- يتضمن كل طلب ل HTTP زمن وصول إضافي عند مقارنته مع عميل HTTP أصلي.
- اعتمادا على مزود التخزين المكون، يمكن أن تؤدي رسائل الطلب أو الاستجابة الكبيرة إلى تدهور كبير في أداء التنسيق. على سبيل المثال، عند استخدام Azure Storage، يتم ضغط وتخزين حمولات HTTP الكبيرة جدا بحيث لا يمكن وضعها في رسائل Azure Queue في ذاكرة Azure Blob.
- لا تدعم تدفق مجموعة البيانات وثنائي البيانات الأساسية
- القدرة على تخصيص سلوك عميل HTTP محدودة.
إذا كان أي من هذه القيود قد يؤثر على حالة الاستخدام، ففكر بدلًا من ذلك في استخدام وظائف النشاط ولغة محددة وعملاء ل HTTP لإجراء مكالمات HTTP صادرة.
قابلية التوسعة (.NET قيد التشغيل فقط)
يمكن تخصيص سلوك عميل HTTP الداخلي في التنسيق باستخدام Azure Functions .NET حقن الاعتماديات للعامل الجاري في العملية. هذه القدرة يمكن أن تكون مفيدة لإجراء تغييرات سلوكية صغيرة. كما يمكن أن تكون مفيدة لاختبار وحدة عميل HTTP عن طريق إضافة عناصر وهمية.
يوضح المثال التالي استخدام حقن التبعية لتعطيل التحقق من صحة شهادة TLS/SSL لوظائف التزامن التي تستدعي نقاط نهاية HTTP الخارجية.
public class Startup : FunctionsStartup
{
public override void Configure(IFunctionsHostBuilder builder)
{
// Register own factory
builder.Services.AddSingleton<
IDurableHttpMessageHandlerFactory,
MyDurableHttpMessageHandlerFactory>();
}
}
public class MyDurableHttpMessageHandlerFactory : IDurableHttpMessageHandlerFactory
{
public HttpMessageHandler CreateHttpMessageHandler()
{
// Disable TLS/SSL certificate validation (not recommended in production!)
return new HttpClientHandler
{
ServerCertificateCustomValidationCallback =
HttpClientHandler.DangerousAcceptAnyServerCertificateValidator,
};
}
}