ترحيل تطبيقات .NET من النموذج قيد المعالجة إلى نموذج العامل المعزول

هام

سينتهي الدعم للنموذج قيد التنفيذ في 10 نوفمبر 2026. نوصي بشدة بترحيل تطبيقاتك إلى نموذج العامل المعزول باتباع الإرشادات الواردة في هذه المقالة.

ترشدك هذه المقالة خلال عملية ترحيل تطبيق وظائف .NET بأمان من النموذج قيد المعالجة إلى نموذج العامل المعزول. للتعرف على الاختلافات عالية المستوى بين هذه النماذج، راجع مقارنة وضع التنفيذ.

يفترض هذا الدليل أن تطبيقك يعمل على الإصدار 4.x من وقت تشغيل الوظائف. إذا لم يكن الأمر كما هو، يجب عليك بدلا من ذلك اتباع الدلائل لترقية إصدار المضيف الخاص بك:

تساعدك أدلة ترحيل إصدار المضيف هذه أيضا على الترحيل إلى نموذج العامل المعزول أثناء العمل من خلالها.

تحديد تطبيقات الوظائف المراد ترحيلها

استخدم البرنامج النصي Azure PowerShell التالي لإنشاء قائمة بتطبيقات الوظائف في اشتراكك الذي يستخدم حاليا النموذج قيد المعالجة.

يستخدم البرنامج النصي الاشتراك الذي تم تكوين Azure PowerShell لاستخدامه حاليا. يمكنك تغيير الاشتراك عن طريق التشغيل Set-AzContext -Subscription '<YOUR SUBSCRIPTION ID>' أولا واستبداله <YOUR SUBSCRIPTION ID> بمعرف الاشتراك الذي ترغب في تقييمه.

$FunctionApps = Get-AzFunctionApp

$AppInfo = @{}

foreach ($App in $FunctionApps)
{
     if ($App.Runtime -eq 'dotnet')
     {
          $AppInfo.Add($App.Name, $App.Runtime)
     }
}

$AppInfo

اختر إصدار .NET المستهدف

في الإصدار 4.x من وقت تشغيل الوظائف، يستهدف تطبيق وظيفة .NET .NET 6 عند استخدام النموذج قيد المعالجة.

عند ترحيل تطبيق الوظائف، ستتوفر لديك الفرصة لاختيار الإصدار الهدف من .NET. يمكنك تحديث مشروع C# إلى أحد الإصدارات التالية من .NET التي يدعمها الإصدار 4.x من Functions:

إصدار ‎.NET نوع إصدار نهج الدعم الرسمي ل .NET نموذجمعالجة الوظائف 1,2
.NET 9 معاينة3 نموذج عامل معزول
.NET 8 LTS (نهاية الدعم في 10 نوفمبر 2026) نموذج عامل معزول،
النموذجقيد المعالجة 2
.NET 6 LTS (نهاية الدعم في 12 نوفمبر 2024) نموذج عامل معزول،
النموذجقيد المعالجة 2
.NET Framework 4.8 راجع النهج نموذج عامل معزول

1 يدعم نموذج العامل المعزول إصدارات الدعم طويل الأجل (LTS) ودعم المصطلحات القياسية (STS) من .NET، بالإضافة إلى .NET Framework. يدعم النموذج قيد المعالجة إصدارات LTS من .NET فقط، وتنتهي ب .NET 8. للحصول على مقارنة كاملة للميزات والوظائف بين النموذجين، راجع الاختلافات بين العملية قيد المعالجة وعزل وظائف .NET Azure.

2 ينتهي الدعم للنموذج قيد المعالجة في 10 نوفمبر 2026. لمزيد من المعلومات، راجع إعلان الدعم هذا. للحصول على الدعم الكامل المستمر، يجب ترحيل تطبيقاتك إلى نموذج العامل المعزول.

3 راجع معاينة إصدارات .NET في نموذج العامل المعزول للحصول على تفاصيل حول الدعم والقيود الحالية وإرشادات استخدام إصدار المعاينة.

تلميح

نوصي بالترقية إلى .NET 8 على نموذج العامل المعزول. يوفر هذا مسار ترحيل سريع إلى الإصدار الذي تم إصداره بالكامل مع أطول نافذة دعم من .NET.

لا يقدم هذا الدليل أمثلة محددة ل .NET 9 (معاينة) أو .NET 6. إذا كنت بحاجة إلى استهداف هذه الإصدارات، يمكنك تكييف أمثلة .NET 8.

التجهيز للترحيل

إذا لم تكن قد قمت بذلك بالفعل، فحدد قائمة التطبيقات التي تحتاج إلى ترحيل في اشتراك Azure الحالي باستخدام Azure PowerShell.

قبل ترحيل تطبيق إلى نموذج العامل المعزول، يجب عليك مراجعة محتويات هذا الدليل بدقة. يجب عليك أيضا التعرف على ميزات نموذج العامل المعزول والاختلافات بين النموذجين.

لترحيل التطبيق، سوف:

  1. قم بترحيل المشروع المحلي إلى نموذج العامل المعزول باتباع الخطوات الواردة في ترحيل المشروع المحلي.
  2. بعد ترحيل المشروع، اختبر التطبيق بالكامل محليا باستخدام الإصدار 4.x من Azure Functions Core Tools.
  3. تحديث تطبيق الوظائف في Azure إلى النموذج المعزول.

ترحيل مشروعك المحلي

يوضح القسم التغييرات المختلفة التي تحتاج إلى إجراؤها على مشروعك المحلي لنقله إلى نموذج العامل المعزول. تتغير بعض الخطوات استنادا إلى الإصدار المستهدف من .NET. استخدم علامات التبويب لتحديد الإرشادات التي تطابق الإصدار الذي تريده. تفترض هذه الخطوات مشروع C# محليا، وإذا كان تطبيقك يستخدم بدلا من ذلك برنامج C# النصي (.csx ملفات)، فيجب عليك التحويل إلى نموذج المشروع قبل المتابعة.

تلميح

إذا كنت تنتقل إلى إصدار LTS أو STS من .NET، يمكن استخدام مساعد ترقية .NET لإجراء العديد من التغييرات المذكورة في الأقسام التالية تلقائيا.

أولا، قم بتحويل ملف المشروع وتحديث تبعياتك. كما تفعل، سترى أخطاء البناء للمشروع. في الخطوات اللاحقة، ستقوم بإجراء التغييرات المقابلة لإزالة هذه الأخطاء.

ملف المشروع

المثال التالي هو .csproj ملف مشروع يستخدم .NET 6 على الإصدار 4.x:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <AzureFunctionsVersion>v4</AzureFunctionsVersion>
    <RootNamespace>My.Namespace</RootNamespace>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.NET.Sdk.Functions" Version="4.1.1" />
  </ItemGroup>
  <ItemGroup>
    <None Update="host.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="local.settings.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <CopyToPublishDirectory>Never</CopyToPublishDirectory>
    </None>
  </ItemGroup>
</Project>

استخدم أحد الإجراءات التالية لتحديث ملف XML هذا لتشغيله في نموذج العامل المعزول:

تفترض هذه الخطوات مشروع C# محليا، وإذا كان تطبيقك يستخدم بدلا من ذلك برنامج C# النصي (.csx ملفات)، فيجب عليك التحويل إلى نموذج المشروع قبل المتابعة.

التغييرات التالية مطلوبة في .csproj ملف مشروع XML:

  1. تعيين قيمة PropertyGroup.TargetFramework إلى net8.0.

  2. تعيين قيمة PropertyGroup.AzureFunctionsVersion إلى v4.

  3. أضف العنصر التالي OutputType إلى PropertyGroup:

    <OutputType>Exe</OutputType>
    
  4. في ItemGroup.PackageReference استبدل مرجع الحزمة بالمراجع Microsoft.NET.Sdk.Functions التالية:

      <FrameworkReference Include="Microsoft.AspNetCore.App" />
      <PackageReference Include="Microsoft.Azure.Functions.Worker" Version="1.21.0" />
      <PackageReference Include="Microsoft.Azure.Functions.Worker.Sdk" Version="1.17.2" />
      <PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Http.AspNetCore" Version="1.2.1" />
      <PackageReference Include="Microsoft.ApplicationInsights.WorkerService" Version="2.22.0" />
      <PackageReference Include="Microsoft.Azure.Functions.Worker.ApplicationInsights" Version="1.2.0" />
    

    دون أي مراجع إلى حزم أخرى في Microsoft.Azure.WebJobs.* مساحات الأسماء. ستستبدل هذه الحزم في خطوة لاحقة.

  5. أضف الجديد ItemGroupالتالي:

    <ItemGroup>
      <Using Include="System.Threading.ExecutionContext" Alias="ExecutionContext"/>
    </ItemGroup>
    

بعد إجراء هذه التغييرات، يجب أن يبدو مشروعك المحدث مثل المثال التالي:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <AzureFunctionsVersion>v4</AzureFunctionsVersion>
    <RootNamespace>My.Namespace</RootNamespace>
    <OutputType>Exe</OutputType>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>
  <ItemGroup>
    <FrameworkReference Include="Microsoft.AspNetCore.App" />
    <PackageReference Include="Microsoft.Azure.Functions.Worker" Version="1.21.0" />
    <PackageReference Include="Microsoft.Azure.Functions.Worker.Sdk" Version="1.17.2" />
    <PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Http.AspNetCore" Version="1.2.1" />
    <PackageReference Include="Microsoft.ApplicationInsights.WorkerService" Version="2.22.0" />
    <PackageReference Include="Microsoft.Azure.Functions.Worker.ApplicationInsights" Version="1.2.0" />
    <!-- Other packages may also be in this list -->
  </ItemGroup>
  <ItemGroup>
    <None Update="host.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="local.settings.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <CopyToPublishDirectory>Never</CopyToPublishDirectory>
    </None>
  </ItemGroup>
  <ItemGroup>
    <Using Include="System.Threading.ExecutionContext" Alias="ExecutionContext"/>
  </ItemGroup>
</Project>

قد يتطلب تغيير إطار العمل المستهدف لمشروعك أيضا تغييرات على أجزاء من سلسلة الأدوات الخاصة بك، خارج التعليمات البرمجية للمشروع. على سبيل المثال، في VS Code، قد تحتاج إلى تحديث إعداد الملحق azureFunctions.deploySubpath من خلال إعدادات المستخدم أو ملف المشروع .vscode/settings.json . تحقق من وجود أي تبعيات على إصدار إطار العمل قد تكون موجودة خارج التعليمات البرمجية لمشروعك، كجزء من خطوات الإنشاء أو مسار CI/CD.

مراجع الحزمة

عند الترحيل إلى نموذج العامل المعزول، تحتاج إلى تغيير الحزم مراجع التطبيق الخاص بك.

إذا لم تكن قد قمت بالفعل، فقم بتحديث مشروعك للإشارة إلى أحدث الإصدارات الثابتة من:

استنادا إلى المشغلات والروابط التي يستخدمها تطبيقك، قد يحتاج تطبيقك إلى الرجوع إلى مجموعة مختلفة من الحزم. يعرض الجدول التالي الاستبدالات لبعض الملحقات الأكثر استخداما:

السيناريو التغييرات التي تم إجراؤها على مراجع الحزمة
مشغل المؤقت إضافة
Microsoft.Azure.Functions.Worker.Extensions.Timer
روابط التخزين الاستبدال
Microsoft.Azure.WebJobs.Extensions.Storage
مع
Microsoft.Azure.Functions.Worker.Extensions.Storage.Blobs،
Microsoft.Azure.Functions.Worker.Extensions.Storage.Queues، و
Microsoft.Azure.Functions.Worker.Extensions.Tables
روابط الكائن الثنائي كبير الحجم استبدال المراجع ب
Microsoft.Azure.WebJobs.Extensions.Storage.Blobs
مع أحدث إصدار من
Microsoft.Azure.Functions.Worker.Extensions.Storage.Blobs
روابط قائمة الانتظار استبدال المراجع ب
Microsoft.Azure.WebJobs.Extensions.Storage.Queues
مع أحدث إصدار من
Microsoft.Azure.Functions.Worker.Extensions.Storage.Queues
روابط الجدول استبدال المراجع ب
Microsoft.Azure.WebJobs.Extensions.Tables
مع أحدث إصدار من
Microsoft.Azure.Functions.Worker.Extensions.Tables
روابط Cosmos DB استبدال المراجع ب
Microsoft.Azure.WebJobs.Extensions.CosmosDB
و/أو
Microsoft.Azure.WebJobs.Extensions.DocumentDB
مع أحدث إصدار من
Microsoft.Azure.Functions.Worker.Extensions.CosmosDB
روابط ناقل خدمة Microsoft Azure استبدال المراجع ب
Microsoft.Azure.WebJobs.Extensions.ServiceBus
مع أحدث إصدار من
Microsoft.Azure.Functions.Worker.Extensions.ServiceBus
روابط مراكز الأحداث استبدال المراجع ب
Microsoft.Azure.WebJobs.Extensions.EventHubs
مع أحدث إصدار من
Microsoft.Azure.Functions.Worker.Extensions.EventHubs
روابط شبكة الأحداث استبدال المراجع ب
Microsoft.Azure.WebJobs.Extensions.EventGrid
مع أحدث إصدار من
Microsoft.Azure.Functions.Worker.Extensions.EventGrid
روابط خدمة SignalR استبدال المراجع ب
Microsoft.Azure.WebJobs.Extensions.SignalRService
مع أحدث إصدار من
Microsoft.Azure.Functions.Worker.Extensions.SignalRService
Durable Functions استبدال المراجع ب
Microsoft.Azure.WebJobs.Extensions.DurableTask
مع أحدث إصدار من
Microsoft.Azure.Functions.Worker.Extensions.DurableTask
Durable Functions
(موفر تخزين SQL)
استبدال المراجع ب
Microsoft.DurableTask.SqlServer.AzureFunctions
مع أحدث إصدار من
Microsoft.Azure.Functions.Worker.Extensions.DurableTask.SqlServer
Durable Functions
(موفر تخزين Netherite)
استبدال المراجع ب
Microsoft.Azure.DurableTask.Netherite.AzureFunctions
مع أحدث إصدار من
Microsoft.Azure.Functions.Worker.Extensions.DurableTask.Netherite
روابط SendGrid استبدال المراجع ب
Microsoft.Azure.WebJobs.Extensions.SendGrid
مع أحدث إصدار من
Microsoft.Azure.Functions.Worker.Extensions.SendGrid
روابط Kafka استبدال المراجع ب
Microsoft.Azure.WebJobs.Extensions.Kafka
مع أحدث إصدار من
Microsoft.Azure.Functions.Worker.Extensions.Kafka
روابط RabbitMQ استبدال المراجع ب
Microsoft.Azure.WebJobs.Extensions.RabbitMQ
مع أحدث إصدار من
Microsoft.Azure.Functions.Worker.Extensions.RabbitMQ
إدراج التبعية
وتكوين بدء التشغيل
إزالة المراجع إلى
Microsoft.Azure.Functions.Extensions
(يوفر نموذج العامل المعزول هذه الوظيفة بشكل افتراضي.)

راجع الارتباطات المدعومة للحصول على قائمة كاملة من الملحقات التي يجب مراعاتها، واستشر وثائق كل ملحق للحصول على إرشادات التثبيت الكاملة لنموذج العملية المعزول. تأكد من تثبيت أحدث إصدار مستقر من أي حزم تستهدفها.

تلميح

قد تتطلب أي تغييرات على إصدارات الملحقات أثناء هذه العملية تحديث host.json الملف أيضا. تأكد من قراءة وثائق كل ملحق تستخدمه. على سبيل المثال، يحتوي ملحق ناقل خدمة Microsoft Azure على تغييرات فاصلة في البنية بين الإصدارين 4.x و5.x. لمزيد من المعلومات، راجع روابط ناقل خدمة Azure ل Azure Functions.

يجب ألا يشير تطبيق نموذج العامل المعزول إلى أي حزم في Microsoft.Azure.WebJobs.* مساحات الأسماء أو Microsoft.Azure.Functions.Extensions. إذا كان لديك أي مراجع متبقية لهذه، يجب إزالتها.

تلميح

قد يعتمد تطبيقك أيضا على أنواع Azure SDK، إما كجزء من المشغلات والروابط أو كتبعية مستقلة. يجب عليك اغتنم هذه الفرصة لتحديث هذه أيضا. تعمل أحدث إصدارات ملحقات الوظائف مع أحدث إصدارات Azure SDK ل .NET، وجميع الحزم تقريبا هي النموذج Azure.*.

ملف Program.cs

عند الترحيل للتشغيل في عملية عامل معزولة، يجب إضافة Program.cs ملف إلى مشروعك بالمحتويات التالية:

using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

var host = new HostBuilder()
    .ConfigureFunctionsWebApplication()
    .ConfigureServices(services => {
        services.AddApplicationInsightsTelemetryWorkerService();
        services.ConfigureFunctionsApplicationInsights();
    })
    .Build();

host.Run();

يتضمن هذا المثال تكامل ASP.NET Core لتحسين الأداء وتوفير نموذج برمجة مألوف عندما يستخدم تطبيقك مشغلات HTTP. إذا كنت لا تنوي استخدام مشغلات HTTP، يمكنك استبدال الاستدعاء ConfigureFunctionsWebApplication باستدعاء إلى ConfigureFunctionsWorkerDefaults. إذا قمت بذلك، يمكنك إزالة المرجع إلى Microsoft.Azure.Functions.Worker.Extensions.Http.AspNetCore من ملف المشروع. ومع ذلك، للحصول على أفضل أداء، حتى بالنسبة للوظائف مع أنواع المشغلات الأخرى، يجب الاحتفاظ FrameworkReference ب إلى ASP.NET Core.

Program.cs سيستبدل الملف أي ملف يحتوي على السمة FunctionsStartup ، وهو عادة Startup.cs ملف. في الأماكن التي تشير IFunctionsHostBuilder.Servicesفيها التعليمات البرمجية الخاصة بك FunctionsStartup ، يمكنك بدلا من ذلك إضافة عبارات ضمن .ConfigureServices() أسلوب HostBuilder في .Program.cs لمعرفة المزيد حول العمل مع Program.cs، راجع بدء التشغيل والتكوين في دليل نموذج العامل المعزول.

تتضمن الأمثلة الافتراضية Program.cs أعلاه إعداد تكامل Application Insights لنموذج العامل المعزول. Program.csفي ، يجب عليك أيضا تكوين أي تصفية سجل يجب أن تنطبق على السجلات القادمة من التعليمات البرمجية في مشروعك. في نموذج العامل المعزول، يتحكم الملف فقط في host.json الأحداث المنبعثة من وقت تشغيل مضيف الوظائف. إذا لم تقم بتكوين قواعد التصفية في Program.cs، فقد ترى اختلافات في مستويات السجل الموجودة لفئات مختلفة في بيانات تتبع الاستخدام.

على الرغم من أنه يمكنك تسجيل مصادر التكوين المخصصة كجزء من HostBuilder، لاحظ أن هذه تنطبق بالمثل فقط على التعليمات البرمجية في مشروعك. يلزم أيضا تكوين المشغل والربط من قبل النظام الأساسي، ويجب توفير ذلك من خلال إعدادات التطبيق أو مراجع Key Vault أو ميزات مراجع تكوين التطبيق.

بمجرد نقل كل شيء من أي موجود FunctionsStartup إلى Program.cs الملف، يمكنك حذف السمة FunctionsStartup والفئة التي تم تطبيقها عليها.

تغييرات توقيع الدالة

تتغير بعض أنواع المفاتيح بين النموذج قيد المعالجة ونموذج العامل المعزول. يتعلق العديد من هذه السمات والمعلمات وأنواع الإرجاع التي تشكل توقيع الدالة. لكل وظيفة من وظائفك، يجب إجراء تغييرات على:

  • سمة الدالة (التي تعين أيضا اسم الدالة)
  • كيف تحصل الدالة على ILogger/ILogger<T>
  • سمات ومعلمات المشغل والربط

يرشدك باقي هذا القسم خلال كل خطوة من هذه الخطوات.

سمات الدالة

تحل Function السمة في نموذج العامل المعزول محل السمة FunctionName . السمة الجديدة لها نفس التوقيع، والفرق الوحيد هو في الاسم. لذلك يمكنك فقط إجراء استبدال سلسلة عبر مشروعك.

تسجيل الدخول

في النموذج قيد المعالجة، يمكنك تضمين معلمة اختيارية ILogger إلى الدالة الخاصة بك، أو يمكنك استخدام إدخال التبعية للحصول على ILogger<T>. إذا كان تطبيقك يستخدم بالفعل إدخال التبعية، فإن نفس الآليات تعمل في نموذج العامل المعزول.

ومع ذلك، لأي دالات تعتمد على معلمة ILogger الأسلوب، تحتاج إلى إجراء تغيير. يوصى باستخدام إدخال التبعية للحصول على ILogger<T>. استخدم الخطوات التالية لترحيل آلية تسجيل الدالة:

  1. في فئة الدالة الخاصة بك، أضف خاصية private readonly ILogger<MyFunction> _logger; ، مع MyFunction استبدال باسم فئة الدالة الخاصة بك.

  2. إنشاء منشئ لفئة الدالة التي تأخذ في ILogger<T> كمعلمة:

    public MyFunction(ILogger<MyFunction> logger) {
        _logger = logger;
    }
    

    استبدل كلا مثيلي في قصاصة التعليمات MyFunction البرمجية السابقة باسم فئة الدالة الخاصة بك.

  3. لعمليات التسجيل في التعليمات البرمجية للدالة الخاصة بك، استبدل مراجع المعلمة ILogger ب _logger.

  4. إزالة المعلمة ILogger من توقيع الدالة.

لمعرفة المزيد، راجع تسجيل الدخول إلى نموذج العامل المعزول.

تغييرات المشغل والربط

عند تغيير مراجع الحزمة في خطوة سابقة، قمت بإدخال أخطاء للمشغلات والروابط التي ستقوم بإصلاحها الآن:

  1. إزالة أي using Microsoft.Azure.WebJobs; عبارات.

  2. إضافة عبارة using Microsoft.Azure.Functions.Worker; .

  3. لكل سمة ربط، قم بتغيير اسم السمة كما هو محدد في وثائقها المرجعية، والتي يمكنك العثور عليها في فهرس الارتباطات المدعومة . بشكل عام، تتغير أسماء السمات كما يلي:

    • عادة ما تظل المشغلات مسماة بنفس الطريقة. على سبيل المثال، QueueTrigger هو اسم السمة لكلا النموذجين.
    • تحتاج روابط الإدخال عادة إلى إضافة "إدخال" إلى اسمها. على سبيل المثال، إذا استخدمت سمة CosmosDB ربط الإدخال في نموذج العملية، ستكون السمة الآن CosmosDBInput.
    • تحتاج روابط الإخراج عادة إلى إضافة "Output" إلى اسمها. على سبيل المثال، إذا استخدمت سمة Queue ربط الإخراج في النموذج قيد المعالجة، ستكون هذه السمة الآن QueueOutput.
  4. قم بتحديث معلمات السمة لتعكس إصدار نموذج العامل المعزول، كما هو محدد في الوثائق المرجعية للربط.

    على سبيل المثال، في النموذج قيد المعالجة، يتم تمثيل ربط إخراج كائن ثنائي كبير الحجم بسمة [Blob(...)] تتضمن Access خاصية . في نموذج العامل المعزول، ستكون [BlobOutput(...)]سمة إخراج الكائن الثنائي كبير الحجم . لم يعد الربط يتطلب الخاصية Access ، بحيث يمكن إزالة المعلمة. حتى [Blob("sample-images-sm/{fileName}", FileAccess.Write, Connection = "MyStorageConnection")] تصبح [BlobOutput("sample-images-sm/{fileName}", Connection = "MyStorageConnection")].

  5. نقل روابط الإخراج من قائمة معلمات الدالة. إذا كان لديك ربط إخراج واحد فقط، يمكنك تطبيق هذا على نوع الإرجاع للدالة. إذا كان لديك مخرجات متعددة، قم بإنشاء فئة جديدة مع خصائص لكل إخراج، وتطبيق السمات على هذه الخصائص. لمعرفة المزيد، راجع روابط الإخراج المتعددة.

  6. راجع الوثائق المرجعية لكل ربط للأنووع التي يسمح لك بالربط بها. في بعض الحالات، قد تحتاج إلى تغيير النوع. بالنسبة لروابط الإخراج، إذا كان إصدار النموذج قيد المعالجة IAsyncCollector<T>يستخدم ، يمكنك استبدال هذا بربط إلى صفيف من النوع الهدف: T[]. يمكنك أيضا التفكير في استبدال ربط الإخراج بكائن عميل للخدمة التي يمثلها، إما كنوع ربط ربط إدخال إذا كان متوفرا، أو عن طريق إدخال عميل بنفسك.

  7. إذا كانت الدالة تتضمن معلمة IBinder ، فقم بإزالتها. استبدل الوظيفة بكائن عميل للخدمة التي يمثلها، إما كنوع ربط لربط إدخال إذا كان متوفرا، أو عن طريق إدخال عميل بنفسك.

  8. تحديث التعليمات البرمجية للدالة للعمل مع أي أنواع جديدة.

الملف local.settings.json

يتم استخدام ملف local.settings.json فقط عند التشغيل محليا. للحصول على معلومات، راجع ملف الإعدادات المحلية.

عند الترحيل من التشغيل قيد التشغيل إلى التشغيل في عملية عامل معزولة، تحتاج إلى تغيير FUNCTIONS_WORKER_RUNTIME القيمة إلى "dotnet-isolated". تأكد من أن ملف local.settings.json يحتوي على العناصر التالية على الأقل:

{
    "IsEncrypted": false,
    "Values": {
        "AzureWebJobsStorage": "UseDevelopmentStorage=true",
        "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated"
    }
}

قد تكون القيمة التي لديك ل "AzureWebJobsStorage" مختلفة. لا تحتاج إلى تغيير قيمته كجزء من الترحيل.

ملف host.json

لا يلزم إجراء أي تغييرات على host.json الملف. ومع ذلك، إذا كان تكوين Application Insights الخاص بك في هذا الملف من مشروع النموذج قيد المعالجة، فقد تحتاج إلى إجراء تغييرات إضافية في ملفك Program.cs . host.json يتحكم الملف فقط في التسجيل من وقت تشغيل مضيف الوظائف، وفي نموذج العامل المعزول، تأتي بعض هذه السجلات من التطبيق الخاص بك مباشرة، مما يمنحك المزيد من التحكم. راجع إدارة مستويات السجل في نموذج العامل المعزول للحصول على تفاصيل حول كيفية تصفية هذه السجلات.

تغييرات أخرى في التعليمات البرمجية

يسلط هذا القسم الضوء على تغييرات التعليمات البرمجية الأخرى التي يجب مراعاتها أثناء العمل من خلال الترحيل. هذه التغييرات غير مطلوبة من قبل جميع التطبيقات، ولكن يجب تقييم ما إذا كانت هناك أي تغييرات ذات صلة بسيناريوهاتك.

تسلسل JSON

بشكل افتراضي، يستخدم System.Text.Json نموذج العامل المعزول لتسلسل JSON. لتخصيص خيارات التسلسل أو التبديل إلى JSON.NET (Newtonsoft.Json)، راجع هذه الإرشادات.

مستويات سجل Application Insights والتصفية

يمكن إرسال السجلات إلى Application Insights من كل من وقت تشغيل مضيف الوظائف والرمز في مشروعك. host.json يسمح لك بتكوين قواعد لتسجيل المضيف، ولكن للتحكم في السجلات القادمة من التعليمات البرمجية الخاصة بك، ستحتاج إلى تكوين قواعد التصفية كجزء من .Program.cs راجع إدارة مستويات السجل في نموذج العامل المعزول للحصول على تفاصيل حول كيفية تصفية هذه السجلات.

مثال على عمليات ترحيل الوظائف

مثال مشغل HTTP

قد يبدو مشغل HTTP للنموذج قيد المعالجة مثل المثال التالي:

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Extensions.Logging;

namespace Company.Function
{
    public static class HttpTriggerCSharp
    {
        [FunctionName("HttpTriggerCSharp")]
        public static IActionResult Run(
            [HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");

            return new OkObjectResult($"Welcome to Azure Functions, {req.Query["name"]}!");
        }
    }
}

قد يبدو مشغل HTTP للإصدار الذي تم ترحيله مثل المثال التالي:

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Logging;

namespace Company.Function
{
    public class HttpTriggerCSharp
    {
        private readonly ILogger<HttpTriggerCSharp> _logger;

        public HttpTriggerCSharp(ILogger<HttpTriggerCSharp> logger)
        {
            _logger = logger;
        }

        [Function("HttpTriggerCSharp")]
        public IActionResult Run(
            [HttpTrigger(AuthorizationLevel.Function, "get")] HttpRequest req)
        {
            _logger.LogInformation("C# HTTP trigger function processed a request.");

            return new OkObjectResult($"Welcome to Azure Functions, {req.Query["name"]}!");
        }
    }
}

تحديث تطبيق الوظائف في Azure

يتضمن تحديث تطبيق الوظائف إلى النموذج المعزول تغييرين يجب إكمالهما معا، لأنه إذا أكملت تطبيقا واحدا فقط، فسيكون التطبيق في حالة خطأ. يؤدي كل من هذه التغييرات أيضا إلى إعادة تشغيل عملية التطبيق. لهذه الأسباب، يجب إجراء التحديث باستخدام فتحة التقسيم المرحلي. تساعد فتحات التقسيم المرحلي على تقليل وقت التعطل لتطبيقك وتسمح لك باختبار التعليمات البرمجية التي تم ترحيلها والتحقق منها باستخدام التكوين المحدث في Azure. يمكنك بعد ذلك نشر التطبيق الذي تم ترحيله بالكامل إلى فتحة الإنتاج من خلال عملية تبديل.

هام

عندما لا تتطابق البيانات الأساسية المنشورة للتطبيق مع وقت التشغيل الذي تم تكوينه، فسيكون في حالة خطأ. أثناء عملية الترحيل، ستضع التطبيق في هذه الحالة، بشكل مثالي مؤقتا فقط. تساعد فتحات التوزيع على التخفيف من تأثير ذلك، لأنه سيتم حل حالة الخطأ في بيئة التقسيم المرحلي (غير الإنتاجي) قبل تطبيق التغييرات كتحديث واحد لبيئة الإنتاج الخاصة بك. تدافع الفتحات أيضا ضد أي أخطاء وتسمح لك بالكشف عن أي مشكلات أخرى قبل الوصول إلى الإنتاج.

أثناء العملية، قد لا تزال ترى أخطاء في السجلات القادمة من فتحة التقسيم المرحلي (غير الإنتاج). هذا متوقع، على الرغم من أن هذه يجب أن تزول أثناء متابعة الخطوات. قبل تنفيذ عملية تبديل الفتحة، يجب عليك تأكيد أن هذه الأخطاء تتوقف عن رفعها وأن التطبيق الخاص بك يعمل كما هو متوقع.

استخدم الخطوات التالية لاستخدام فتحات النشر لتحديث تطبيق الوظائف إلى نموذج العامل المعزول:

  1. إنشاء فتحة نشر إذا لم تكن قد قمت بالفعل. قد ترغب أيضا في التعرف على عملية تبديل الفتحة والتأكد من أنه يمكنك إجراء تحديثات للتطبيق الحالي بأقل قدر من التعطيل.

  2. قم بتغيير تكوين فتحة التقسيم المرحلي (غير الإنتاج) لاستخدام نموذج العامل المعزول عن طريق تعيين FUNCTIONS_WORKER_RUNTIME إعداد التطبيق إلى dotnet-isolated. FUNCTIONS_WORKER_RUNTIME يجب عدم وضع علامة "إعداد الفتحة".

    إذا كنت تستهدف أيضا إصدارا مختلفا من .NET كجزء من التحديث، يجب عليك أيضا تغيير تكوين المكدس. للقيام بذلك، راجع الإرشادات لتحديث تكوين المكدس لنموذج العامل المعزول. ستستخدم نفس الإرشادات لأي تحديثات إصدار .NET مستقبلية تقوم بها.

    إذا كان لديك أي توفير تلقائي للبنية الأساسية مثل مسار CI/CD، فتأكد من تحديث الأتمتة أيضا للاحتفاظ FUNCTIONS_WORKER_RUNTIME بتعيين إلى dotnet-isolated و لاستهداف إصدار .NET الصحيح.

  3. نشر المشروع الذي تم ترحيله إلى فتحة التقسيم المرحلي (غير الإنتاج) لتطبيق الوظائف.

    إذا كنت تستخدم Visual Studio لنشر مشروع نموذج عامل معزول إلى تطبيق أو فتحة موجودة تستخدم النموذج قيد المعالجة، فيمكنه أيضا إكمال الخطوة السابقة لك في نفس الوقت. إذا لم تكمل الخطوة السابقة، يطالبك Visual Studio بتحديث تطبيق الوظائف أثناء النشر. يقدم Visual Studio هذا كلعملية واحدة، ولكن لا يزال هناك عمليتان منفصلتان. قد لا تزال ترى أخطاء في سجلاتك من فتحة التقسيم المرحلي (غير الإنتاجي) أثناء الحالة المؤقتة.

  4. تأكد من أن التطبيق الخاص بك يعمل كما هو متوقع داخل فتحة التقسيم المرحلي (غير الإنتاج).

  5. تنفيذ عملية تبديل الفتحة. يطبق هذا التغييرات التي أجريتها في فتحة التقسيم المرحلي (غير الإنتاج) على فتحة الإنتاج. يحدث تبديل الفتحة كتحديث واحد، ما يتجنب إدخال حالة الخطأ المؤقتة في بيئة الإنتاج الخاصة بك.

  6. تأكد من أن التطبيق الخاص بك يعمل كما هو متوقع داخل فتحة الإنتاج.

بمجرد إكمال هذه الخطوات، يكتمل الترحيل، ويتم تشغيل تطبيقك على النموذج المعزول. تهانينا! كرر الخطوات من هذا الدليل حسب الضرورة لأي تطبيقات أخرى تحتاج إلى الترحيل.

الخطوات التالية