إنشاء وتشغيل كود .NET من سير العمل القياسي في Azure Logic Apps باستخدام Visual Studio Code

ينطبق على: Azure Logic Apps (قياسي)

عندما يحتاج سيناريو التكامل الخاص بك إلى مهام أو منطق مخصص يتجاوز العمليات والموصلات المدمجة في Azure Logic Apps، أنشئ وشغل .NET الكود ك custom functions في سير العمل الخاص بك في Standard Workflow. يمكن لسير العمل بعد ذلك أداء مهام مثل التحليل المخصص، أو التحقق، أو حتى تطبيق قواعد العمل. باستخدام هذه القدرة، يمكنك تنفيذ سيناريوهات مثل المهام التالية:

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

يوضح هذا الدليل كيفية كتابة وتشغيل كود .NET الخاص بك مباشرة في سير العمل Standard باستخدام Visual Studio Code. تتعلم كيفية إنشاء وتصحيح ونشر الدوال المحلية باستخدام Visual Studio Code حتى تتمكن من الحفاظ على الكود المخصص وتنسيق سير العمل معا، وتصحيحهما في جلسة واحدة، ونشرهما كحل واحد.

إشعار

كود .NET المخصص في الخط غير مناسب للسيناريوهات التالية:

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

لمزيد من المعلومات، راجع القيود.

المتطلبات الأساسية

  • حساب Azure واشتراك. احصل على حساب Azure مجاني.

  • أحدث Visual Studio Code مع الامتداد Azure Logic Apps (القياسي).

    للمتطلبات المسبقة، راجع Create Standards Workflows في Azure Logic Apps المستأجر الواحد باستخدام Visual Studio Code.

    يوفر الامتداد القدرات والفوائد التالية:

    • اكتب التعليمات البرمجية الخاصة بك عن طريق إنشاء وظائف تتمتع بالمرونة والتحكم لحل مشاكل التكامل الأكثر تحديا.
    • تصحيح الأخطاء محليا في Visual Studio Code. التنقل عبر التعليمات البرمجية وسير العمل في نفس جلسة تصحيح الأخطاء.
    • نشر التعليمات البرمجية جنبا إلى جنب مع مهام سير العمل الخاصة بك. لا توجد خطط خدمة أخرى ضرورية.
    • ادعم سيناريوهات ترحيل BizTalk Server حتى تتمكن من رفع وتحويل استثمارات .NET المخصصة من الموقع إلى السحابة.
  • مجلد محلي لاستخدامه في مشروع الكود الخاص بك.

القيود

  • يمكنك استخدام خاصية الوظائف المخصصة فقط في Visual Studio Code الذي يعمل على Windows. تدعم هذه القدرة استخدام إطار عمل .NET و .NET 8 لسير عمل تطبيقات المنطق القياسية التي يتم نشرها واستضافتها على Azure.

  • لا يمكنك استخدام تأليف الوظائف المخصصة في بوابة Azure. ومع ذلك، للعمل مع مخرجات من الدوال المخصصة في سير عملك، اتبع هذه الخطوات:

    1. بعد نشر وظائفك على Azure، اتبع الخطوات في استدعاء كودك من سير العمل لبوابة Azure.

    2. أضف الإجراء المدمج المسمى Call a Local function في تطبيق منطقي هذا إلى سير عملك. اختر الوظائف المخصصة التي تريدها وقم بتشغيل الكود الخاص بك.

    3. استخدم إجراءات سير العمل التالية للإشارة إلى مخرجات الدوال المخصصة، كما يمكنك في أي سير عمل آخر. يمكنك عرض محفوظات تشغيل الإجراء المضمن والمدخلات والمخرجات.

للقيود العامة، انظر Limits ومرجع التكوين ل Azure Logic Apps.

1: إنشاء مشروع برمجية

إضافة Azure Logic Apps (Standard) ل Visual Studio Code تتضمن قالب مشروع كود يوفر تجربة مبسطة للكتابة والتصحيح ونشر الكود الخاص بك مع سير العمل الخاص بك. ينشئ هذا القالب ملف مساحة عمل ومشروعين نموذجيين: مشروع لكتابة كودك ومشروع آخر لإنشاء سير العمل الخاص بك.

إشعار

لا يمكنك استخدام مجلد المشروع نفسه لكل من التعليمات البرمجية وسير العمل.

لإنشاء مشروع برمجة، اتبع الخطوات التالية:

  1. في Visual Studio Code، تسجيل الدخول إلى حسابك Azure.

    إذا استغرق تسجيل الدخول وقتا أطول من المعتاد، يطلب منك Visual Studio Code تسجيل الدخول عبر موقع مصادقة Microsoft من خلال تزويدك برمز الجهاز. لتسجيل الدخول باستخدام الرمز بدلا من ذلك، اتبع الخطوات التالية:

    1. اختر استخدام كود الجهاز، ثم اختر نسخ وفتح.

    2. اختر فتح الرابط لفتح نافذة متصفح جديدة وتابع إلى موقع المصادقة.

    3. في صفحة Sign in to your account أدخل رمز المصادقة، وحدد Next.

  2. في شريط النشاط، اختر أيقونة Azure.

  3. في نافذة Azure، انتقل إلى قسم Workspace. حرك المؤشر فوق منطقة العنوان حتى يظهر شريط الأدوات.

  4. من قائمة Azure Logic Apps، اختر إنشاء تطبيق منطقي جديد مساحة العمل.

    Screenshot تظهر Visual Studio Code مع نافذة Azure، وشريط أدوات قسم مساحة العمل، والخيار المحدد لإنشاء تطبيق منطقي جديد workspace.

  5. في نافذة اختيار المجلد ، تصفح إلى مجلد المشروع المحلي، اختر المجلد، ثم اختر.

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

    يستخدم weather-app هذا المثال كاسم مساحة العمل:

    تظهر لقطة الشاشة الرسالة لإدخال اسم مساحة العمل.

    يستخدم weather-project هذا المثال كاسم مساحة العمل.

  7. لاختيار قالب لموجه مشروعك الجديد، اختر تطبيق Logic مع مشروع كود مخصص.

    تظهر لقطة الشاشة التعليمات لاختيار قالب المشروع.

  8. بالنسبة لملف اختر موجه إطار الهدف ، اختر إما .NET Framework أو .NET 8.

  9. اتبع التعليمات التالية لتقديم المعلومات التالية:

    موجه مثال للقيمة
    إدخال اسم التطبيق weather-logic-app
    Function name لمشروعك .NET الوظائف WeatherForecast
    Namespace لمشروعك .NET الوظائف Contoso.Enterprise
    اختر قالبا لسير العمل الأول لمشروعك:

    - سير العمل القائم بالحالة
    - سير العمل بدون حالة
    - الوكيل الذاتي
    - وكيل حواري
    - تخطى الآن
    سير العمل القائم بالحالة
    اسم سير العمل weather-workflow
  10. لاختيار كيفية فتح موجه مشروعك، اختر فتح في النافذة الحالية.

    بعد الانتهاء من هذه الخطوة، يقوم Visual Studio Code بإنشاء مساحة العمل الخاصة بك، والتي تتضمن مشروع وظائف .NET ومشروع تطبيق منطقي، بشكل افتراضي، على سبيل المثال:

     تعرض مساحة العمل التي تم إنشاؤها باستخدام مشروع تطبيق المنطق ودالة .NET project.

    في نافذة المستكشف ، لاحظ المجلدات التالية في مساحة العمل الخاصة بك:

    المجلد ‏‏الوصف
    < اسم workspace> يحتوي على كل من مشروع وظائف .NET ومشروع سير عمل تطبيق منطقي.
    < "logic-app-name"> يحتوي على الملفات والقطع الأثرية الأخرى لمشروع تطبيق المنطق الخاص بك. على سبيل المثال، ملف workflow.json هو ملف تعريف سير العمل حيث يمكنك بناء سير العمل الخاص بك.
    < اسم الدالة> يحتوي على الملفات والقطع الأثرية الأخرى لمشروع وظائف .NET الخاص بك. على سبيل المثال، <ملف function-name>.cs هو ملف التعليمات البرمجية حيث يمكنك تأليف التعليمات البرمجية الخاصة بك.
  11. بالنسبة لموصل تفعيل الموصلات ل Azure لتطبيقات المنطق <logic-app-name>، اختر Use connectors من Azure.

  12. لطلب Select subscription، اختر اشتراك Azure الذي تريده.

  13. لطلب اختيار مجموعة موارد جديدة للموارد، اختر مجموعة الموارد التي تريدها أو إنشاء مجموعة موارد جديدة.

  14. بالنسبة لموضوع اختر موقعا لموارد جديدة، اختر منطقة Azure للنشر.

  15. بالنسبة لطريقة Select authentication للموصلات Azure، اختر نوع المصادقة المستخدم للاتصالات التي تحتاج إلى مصادقة.

    نوع المصادقة ‏‏الوصف
    الهوية المُدارة اختر هوية الخدمة المدارة لاستخدام الهوية المعينة من النظام أو المستخدم في مورد تطبيق المنطق الخاص بك.

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

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

بعد إكمال هذه الخطوات، تابع إلى القسم التالي حتى تتمكن من تأليف الكود الخاص بك.

2: اكتب كودك

  1. في نافذة المستكشف، قم بتوسيع مجلد مشروع الدالة، وافتح < ملف الدالة .cs>.

    يحتوي هذا الملف على نموذج كود وعناصر كود محددة مع قيم قدمتها سابقا.

    في هذا المثال، يحتوي ملف دالة WeatherForecast.cs على هذه العناصر الكودية مع قيم أمثلة:

    عنصر التعليمات البرمجية قيمة
    اسم مساحة الاسم Contoso.Enterprise
    اسم الفئة WeatherForecast
    اسم الوظيفة WeatherForecast
    معلمات الوظيفة zipcode، temperatureScale
    نوع الإرجاع Task
    نوع مركب Weather

    يوضح المثال التالي نموذج التعليمات البرمجية الكامل:

    //------------------------------------------------------------
    // Copyright (c) Microsoft Corporation. All rights reserved.
    //------------------------------------------------------------
    
    namespace Contoso.Enterprise
    {
        using System;
        using System.Collections.Generic;
        using System.Threading.Tasks;
        using Microsoft.Azure.Functions.Extensions.Workflows;
        using Microsoft.Azure.WebJobs;
        using Microsoft.Extensions.Logging;
    
        /// <summary>
        /// Represents the WeatherForecast flow invoked function.
        /// </summary>
        public class WeatherForecast
        {
    
            private readonly ILogger<WeatherForecast> logger;
    
            public WeatherForecast(ILoggerFactory loggerFactory)
            {
                logger = loggerFactory.CreateLogger<WeatherForecast>();
            }
    
            /// <summary>
            /// Executes the logic app workflow.
            /// </summary>
            /// <param name="zipCode">The zip code.</param>
            /// <param name="temperatureScale">The temperature scale (e.g., Celsius or Fahrenheit).</param>
            [FunctionName("WeatherForecast")]
            public Task<Weather> Run([WorkflowActionTrigger] int zipCode, string temperatureScale)
            {
    
                this.logger.LogInformation("Starting WeatherForecast with Zip Code: " + zipCode + " and Scale: " + temperatureScale);
    
                // Generate random temperature within a range based on the temperature scale
                Random rnd = new Random();
                var currentTemp = temperatureScale == "Celsius" ? rnd.Next(1, 30) : rnd.Next(40, 90);
                var lowTemp = currentTemp - 10;
                var highTemp = currentTemp + 10;
    
                // Create a Weather object with the temperature information
                var weather = new Weather()
                {
                    ZipCode = zipCode,
                    CurrentWeather = $"The current weather is {currentTemp} {temperatureScale}",
                    DayLow = $"The low for the day is {lowTemp} {temperatureScale}",
                    DayHigh = $"The high for the day is {highTemp} {temperatureScale}"
                };
    
                return Task.FromResult(weather);
            }
    
            /// <summary>
            /// Represents the weather information for WeatherForecast.
            /// </summary>
            public class Weather
            {
                /// <summary>
                /// Gets or sets the zip code.
                /// </summary>
                public int ZipCode { get; set; }
    
                /// <summary>
                /// Gets or sets the current weather.
                /// </summary>
                public string CurrentWeather { get; set; }
    
                /// <summary>
                /// Gets or sets the low temperature for the day.
                /// </summary>
                public string DayLow { get; set; }
    
                /// <summary>
                /// Gets or sets the high temperature for the day.
                /// </summary>
                public string DayHigh { get; set; }
            }
        }
    }
    

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

    يتضمن ملف اسم <الوظيفة.cs أيضا الواجهة التي تدعم تسجيل الأحداث لمورد Application Insights الخاص بها.>ILogger يمكنك إرسال معلومات التتبع إلى Application Insights وتخزين تلك المعلومات مع معلومات التتبع من سير العمل الخاص بك، على سبيل المثال:

    private readonly ILogger<WeatherForecast> logger;
    
    public WeatherForecast(ILoggerFactory loggerFactory)
    {
        logger = loggerFactory.CreateLogger<WeatherForecast>();
    }
    
    [FunctionName("WeatherForecast")]
    public Task<Weather> Run([WorkflowActionTrigger] int zipCode, string temperatureScale)
    {
    
        this.logger.LogInformation("Starting WeatherForecast with Zip Code: " + zipCode + " and Scale: " + temperatureScale);
    
        <...>
    
    }
    
  2. استبدل كود الوظيفة النموذجي بكود خاصك، وعدل الطريقة الافتراضية Run لسيناريوهاتك الخاصة. أو يمكنك نسخ الدالة، بما في [FunctionName("<function-name>")] ذلك الإعلان، ثم إعادة تسمية الدالة باسم فريد. يمكنك بعد ذلك تحرير الدالة التي تمت إعادة تسميتها لتلبية احتياجاتك.

يستمر هذا المثال مع الكود الأصلي، بافتراض عدم وجود تغييرات.

3: تجميع وبناء الكود الخاص بك

بعد الانتهاء من كتابة الكود، قم بترجمه للتأكد من عدم وجود أخطاء في البناء. مشروع .NET الوظائف الخاص بك يتضمن تلقائيا مهام البناء، التي تقوم بترجمة وإضافة كودك إلى مجلد lib\custom في مشروع تطبيق المنطق الخاص بك حيث تبحث سير العمل عن وظائف مخصصة لتشغيلها. اعتمادا على النسخة .NET لديك، تضع هذه المهام التجميعات في مجلد lib\custom\net472 أو lib\custom\net8.

اتبع الخطوات التالية:

  1. في Visual Studio Code، في شريط النشاط، اختر Explorer.

  2. في نافذة Explorer ، افتح القائمة المختصرة لمجلد مشروع الوظائف، وحدد Build functions project.

    تظهر لقطة الشاشة قائمة اختصار مشروع الوظائف مع خيار محدد لمشروع بناء وظائف.

    يتم تشغيل مهمة البناء لمشروع الدوال. إذا نجح بناؤك، تظهر نافذة الطرفية رسالة نجاح في البناء .

  3. تأكد من وجود العناصر التالية في مشروع تطبيق المنطق الخاص بك:

    • في مساحة عملك، قم بتوسيع المجلدات التالية: <your-logic-app>>lib\custom>net472 أو net8، بناء على النسخة .NET الخاصة بك. تأكد من أن المجلد الفرعي المسمى net472 أو net8 يحتوي على ملفات التجميع (DLL) المطلوبة لتشغيل الكود، بما في ذلك ملف باسم <function-name>.dll.

    • في مساحة العمل الخاصة بك، قم بتوسيع المجلدات التالية: <تطبيق>> المنطقالخاص بك lib\><. تأكد من أن المجلد الفرعي المسمى <function-name> يحتوي على ملف function.json، والذي يتضمن بيانات التعريف حول التعليمات البرمجية للدالة التي كتبتها. يستخدم مصمم سير العمل هذا الملف لتحديد المدخلات والمخرجات الضرورية عند استدعاء التعليمات البرمجية الخاصة بك.

    يوضح المثال التالي عينة التجميعات التي تم إنشاؤها والملفات الأخرى في مشروع تطبيق المنطق:

    Screenshot تظهر مساحة عمل تطبيق المنطق مع وظائف .NET ومشاريع تطبيقات منطقية. التجميعات الجديدة والملفات المطلوبة الأخرى مرئية.

4: استدعاء كودك من خلال سير عمل

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

  1. في نافذة المستكشف، قم بتوسيع <اسم> workspace، <logic-app-name>، ثم <workflow-name>.

  2. افتح قائمة الاختصارات لworkflow.json، واختر فتح المصمم.

    يفتح مصمم سير العمل ويعرض سير العمل الافتراضي مع المشغلات والإجراءات التالية:

    Operation ‏‏الوصف
    المشغِّل المحفز المدمج للطلب المسمى When Received طلب HTTP.
    الإجراء الإجراء المدمج يسمى استدعاء دالة محلية في هذا التطبيق المنطقي.
    الإجراء إجراء الاستجابة المدمج المسمى الاستجابة الذي تستخدمه للرد على المتصل فقط عند استخدام مشغل الطلب.
  3. على المصمم، اختر الإجراء المسمى استدعاء دالة محلية في هذا التطبيق المنطقي.

    يفتح قسم معلومات الإجراء بحيث يمكنك إعداد استدعاء الدالة المخصصة، على سبيل المثال:

    تظهر لقطة الشاشة سير العمل الافتراضي ومشغله والإجراءات المفتوحة في مصمم سير العمل.

  4. راجع وتأكد من أن قيمة معلمة اسم الدالة مضبوطة على الدالة التي تريد تشغيلها. مراجعة أو تغيير أي قيم معلمات أخرى تستخدمها الدالة.

5: قم بتصحيح الشيفرة وسير العمل

  1. لكل من خدمات Azure Storage التالية، قم بتشغيل محاكي تخزين Azurite:

    • خدمة Azure Blob
    • Azure Queue Service
    • خدمة Azure Table
    1. من قائمة Visual Studio Code View، اختر ><لوحة الأوامر.

    2. عند التوجيه الذي يظهر، اختر Azurite: Start Blob Service من القائمة.

    3. من قائمة الدليل العاملة التي تظهر، اختر تطبيق المنطق الخاص بك.

    4. كرر هذه الخطوات ل Azurite: Start Queue Service و Azurite: Start Table Service.

    إذا نجحت، يظهر شريط المهام الخاص ب Visual Studio Code في أسفل الشاشة خدمات التخزين الثلاث التي تعمل.

  2. قم بربط المصحح بكل من مشروع تطبيق المنطق ومشروع وظائف .NET باتباع هذه الخطوات:

    1. في Visual Studio Code، في شريط النشاط، اختر Run وتصحيح الأخطاء (لوحة المفاتيح: Ctrl+Shift+D).

      لقطة شاشة تظهر شريط النشاط Visual Studio Code مع اختيار تشغيل وتصحيح الأخطاء المحددين.

    2. من قائمة التشغيل والتصحيح، اختر تطبيق المنطق Run/Debug مع الوظيفة المحلية (<تطبيق >)، ثم اختر Play (السهم الأخضر).

      تظهر لقطة الشاشة قائمة التشغيل والتصحيح مع خيار اختيار تطبيق منطق التشغيل/التصحيح الذي يحتوي على وظيفة محلية.

      تقع الأحداث التالية:

      • تفتح نافذة Terminal وتعرض عملية تصحيح الأخطاء التي بدأت.
      • نافذة وحدة التصحيح تفتح وتعرض حالة التصحيح.
      • في أسفل Visual Studio Code، يتحول شريط المهام إلى اللون البرتقالي، مما يشير إلى أن مصحح أخطاء .NET قد تم تحميله.
  3. لتعيين أي نقاط توقف، في تعريف الدالة (<اسم >.cs) أو تعريف سير العمل (workflow.json)، ابحث عن رقم السطر حيث تريد نقطة التوقف واختر العمود المجاور، على سبيل المثال:

    تظهر لقطة الشاشة ملف كود الدالة المفتوح مع تعيين نقاط توقف لسطر داخل الكود.

  4. لتشغيل مشغل الطلب يدويا في سير عملك، افتح صفحة النظرة العامة في سير العمل:

    1. من مشروع تطبيق المنطق الخاص بك، افتح قائمة الاختصارات في ملف workflow.json ، ثم اختر نظرة عامة.

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

    2. في شريط أدوات صفحة نظرة عامة ، حدد تشغيل المشغل.

       تظهر صفحة النظرة العامة المفتوحة Visual Studio Code وسير العمل.

      بعد بدء تشغيل سير العمل، يقوم مصحح الأخطاء بتنشيط نقطة التوقف الأولى.

    3. في قائمة تشغيل أو شريط أدوات مصحح الأخطاء، حدد إجراء تصحيح الأخطاء.

    بعد اكتمال تشغيل سير العمل، تعرض صفحة نظرة عامة التشغيل النهائي والتفاصيل الأساسية حول هذا التشغيل.

  5. لمراجعة مزيد من المعلومات حول تشغيل سير العمل، حدد التشغيل النهائي. أو، من القائمة إلى جانب عمود المدة، حدد إظهار التشغيل.

     تظهر Visual Studio Code وسير العمل المنتهية.

6: نشر كودك

قم بنشر وظائفك المخصصة بنفس الطريقة التي تنشر بها مشروع تطبيق المنطق. سواء قمت بالنشر من Visual Studio Code أو استخدمت عملية DevOps عبر CI/CD، تأكد من بناء الكود قبل نشره. أيضا، تأكد من وجود جميع التجميعات التابعة في مجلد مشروع تطبيق المنطق التالي قبل النشر:

  • .NET 4.7.2: مجلد lib/custom/net472

  • .NET 8: مجلد lib/custom/net8

لمزيد من المعلومات، راجع نشر سير العمل القياسي من Visual Studio Code إلى Azure.

إدراج التبعية

عندما تختار .NET 8، يدعم كود .NET المخصص في سير العمل القياسي <>حقن الاعتماد (DI). تتيح لك هذه القدرة تسجيل الخدمات مرة واحدة، مما يجعلها متاحة تلقائيا لوظائف الكود المخصصة أثناء التشغيل، بدلا من إنشاء تبعيات داخل كل دالة.

إشعار

فقط مشاريع الكود المخصصة .NET 8 في Visual Studio Code تدعم حقن الاعتماد.

بدون حقن التبعيات، غالبا ما تعمل الشيفرة المخصصة التالية:

  • أنشئ نسخ خدمة مباشرة داخل الوظيفة.
  • تكرار المنطق عبر عدة وظائف أو سير عمل.
  • امزج منطق الأعمال مع كود الإعداد والتكوين.

مع نمو سير العمل، يصبح اختبار وإعادة استخدام وصيانة الشيفرة المخصصة أصعب في الاختبار. مع حقن الإدمان، يمكنك:

  • افصل المنطق التجاري عن تنفيذ سير العمل.
  • أعد استخدام الخدمات المشتركة عبر عدة وظائف كود مخصصة.
  • محاذاة الكود المخصص مع أنماط تطوير .NET القياسية.

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

متى تستخدم حقن الاعتماد

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

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

كيف يؤثر حقن الاعتماد على وظائف .NET المخصصة

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

  1. Azure Logic Apps يقوم بتحميل مشروع الكود المخصص الخاص بك.
  2. يقوم Azure Logic Apps بإنفورجيات، وسجل، وحقن الخدمات المطلوبة في الوظيفة.
  3. تعمل الدالة باستخدام التبعيات المحقونة.

تمكين حقن الاعتماد

لاستخدام حقن التبعية مع كود .NET المخصص الخاص بك، أكمل المتطلبات التالية:

  1. عند إنشاء مشروع الكود المخصص الخاص بك، اختر .NET 8.

    فقط مشاريع الشيفرة المخصصة .NET 8 تدعم حقن التبعيات.

  2. في مشروعك، أضف فئة StartupConfiguration لتعريف قائمة التبعيات. نفذ الواجهة IConfigureStartup وسجل تبعياتك باستخدام IServiceCollection، على سبيل المثال:

    using Microsoft.Azure.Functions.Extensions.Workflows;
    using Microsoft.Extensions.DependencyInjection;
    
    public class StartupConfiguration : IConfigureStartup
    {
        /// <summary>
        /// Configures services for the custom code function to use.
        /// </summary>
        /// <param name="services">The service collection to configure.</param>
        public void Configure(IServiceCollection services)
        {
            // Register the routing service with dependency injection
            services.AddSingleton<IRoutingService, OrderRoutingService>();
            services.AddSingleton<IDiscountService, DiscountService>();
        }
    }
    

    واجهة IConfigureStartup تعرف في Microsoft.Extensions.DependencyInjection. لمزيد من المعلومات، انظر StartupConfiguration.cs

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

    public class MySampleFunction
    {
        private readonly ILogger<MySampleFunction> logger;
        private readonly IRoutingService routingService;
        private readonly IDiscountService discountService;
    
        public MySampleFunction(ILoggerFactory loggerFactory, IRoutingService routingService, IDiscountService discountService)
        {
            this.logger = loggerFactory.CreateLogger<MySampleFunction>();
            this.routingService = routingService;
            this.discountService = discountService;
        }
    
        // Add your function logic here
    
    } 
    

بعيدا عن بناء ونشر مشروع الكود المخصص الخاص بك، لا تحتاج إلى اتخاذ أي خطوات أخرى، أو تعديل سير العمل، أو إجراء أي تغييرات أخرى في الإعدادات في Azure Logic Apps لتمكين حقن التبعيات.

لمزيد من المعلومات، راجع عينة حقن الاعتماد على الرمز المخصص.

أحضر طرود NuGet الخاصة بك

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

  • Microsoft. امتدادات.تسجيل.تجريدات
  • Microsoft. الامتدادات.الاعتماديةInjection.Abstractions
  • Microsoft. Azure. الوظائف.الإضافات.السير العملي.التجريدات

استكشاف الأخطاء وإصلاحها

خطأ في جزء معلومات الإجراء

على مصمم سير العمل، عند تحديد الإجراء المضمن المسمى استدعاء دالة محلية في تطبيق المنطق هذا، يعرض جزء معلومات الإجراء الرسالة التالية:

Failed to retrieve dynamic inputs. Error details:

في هذا السيناريو، تحقق من مشروع تطبيق المنطق الخاص بك لترى ما إذا كان مجلد LogicApp\lib\custom فارغا. إذا كان فارغا، من قائمة الطرفية، اختر تشغيلوظائف بناء>.

لا توجد عملية بالاسم المحدد قيد التشغيل حاليا

إذا ظهرت لك رسالة الخطأ عند تشغيل سير العمل، فمن المحتمل أنك أرفقت عملية التصحيح ب .NET Functions بدلا من تطبيق المنطق الخاص بك.

لإصلاح هذه المشكلة، من القائمة تشغيل وتصحيح ، حدد إرفاق بتطبيق المنطق (LogicApp)، ثم حدد تشغيل (مثلث أخضر).

لم يتم استيراد الحزمة بشكل صحيح

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

C:\Users\yourUserName\.nuget\packages\microsoft.net.sdk.functions\4.2.0\build\Microsoft.NET.Sdk.Functions.targets(83,5): warning : The ExtensionsMetadataGenerator package was not imported correctly. Are you missing 'C:\Users\yourUserName\.nuget\packages\microsoft.azure.webjobs.script.extensionsmetadatagenerator\4.0.1\build\Microsoft.Azure.WebJobs.Script.ExtensionsMetadataGenerator.targets' or 'C:\Users\yourUserName\.nuget\packages\microsoft.azure.webjobs.script.extensionsmetadatagenerator\4.0.1\build\Microsoft.Azure.WebJobs.Script.ExtensionsMetadataGenerator.props'? [C:\Desktop\...\custom-code-project\MyLogicAppWorkspace\Function\WeatherForecast.csproj] WeatherForecast -> C:\Desktop\...\custom-code-project\MyLogicAppWorkspace\Function\\bin\Debug\net472\WeatherForecast.dll C:\Users\yourUserName\.nuget\packages\microsoft.net.sdk.functions\4.2.0\build\Microsoft.NET.Sdk.Functions.Build.targets(32,5): error : It was not possible to find any compatible framework version [C:\Desktop\...\custom-code-project\MyLogicAppWorkspace\Function\WeatherForecast.csproj] C:\Users\yourUserName\.nuget\packages\microsoft.net.sdk.functions\4.2.0\build\Microsoft.NET.Sdk.Functions.Build.targets(32,5): error : The specified framework 'Microsoft.NETCore.App', version '6.0.0' was not found. [C:\Desktop\...\custom-code-project\MyLogicAppWorkspace\Function\WeatherForecast.csproj] C:\Users\yourUserName\.nuget\packages\microsoft.net.sdk.functions\4.2.0\build\Microsoft.NET.Sdk.Functions.Build.targets(32,5): error : - Check application dependencies and target a framework version installed at: [C:\Desktop\...\custom-code-project\MyLogicAppWorkspace\Function\WeatherForecast.csproj]

فشل الإنشاء

إذا لم تتضمن دالة المتغيرات وقمت ببناء الكود، فقد تعرض نافذة الإخراج رسائل الخطأ التالية:

C:\Users\yourUserName\...\custom-code-project\Function\func.cs (24,64): error CS1031: Type expected [C:\Users\yourUserName\...\custom-code-project\Function\func.csproj]
C:\Users\yourUserName\...\custom-code-project\Function\func.cs (24,64): error CS1001: Identifier expected [C:\Users\yourUserName\...\custom-code-project\Function\func.csproj]

Build FAILED.

C:\Users\yourUserName\...\custom-code-project\Function\func.cs (24,64): error CS1031: Type expected [C:\Users\yourUserName\...\custom-code-project\Function\func.csproj]
C:\Users\yourUserName\...\custom-code-project\Function\func.cs (24,64): error CS1001: Identifier expected [C:\Users\yourUserName\...\custom-code-project\Function\func.csproj]

0 Warning(s)
2 Error(s)

لحل هذه المشكلة، في طريقة الكود Run الخاص بك، أضف المعلمة التالية:

string parameter1 = null

يوضح المثال التالي كيفية Run ظهور توقيع الأسلوب:

public static Task<Weather> Run([WorkflowActionTrigger] int zipCode, string temperatureScale, string parameter1 = null)

إنشاء سير عمل تطبيقات منطقية قياسية باستخدام Visual Studio Code