الاختلافات بين تجميع موقع ويب وتطبيق ويب

هناك العديد من أنواع وحدات ASP.NET المستندة إلى أنظمة أساسية مختلفة مثل نماذج الويب وصفحات الويب ووحدة التحكم في عرض الطراز (MVC) والأحدث - Core. في هذه المقالة ، أريد أن ألقي نظرة على عدد من الاختلافات بين تجميع موقع ويب ASP.NET وتطبيق ويب ASP.NET.



تجميع موقع على شبكة الإنترنت (الشكل 1) وتطبيق ويب (الشكل 2).



التين. 1: موقع ASP.NET والتمييز بين موقع ASP.NET وتطبيق ويب ASP.NET



التين. 2: تطبيق ويب ASP.NET والتمييز بين موقع ويب ASP.NET وتطبيق ويب ASP.NET

لا تتعلق هذه المقالة بالبنية الداخلية لمشاريع ASP.NET ، ولكن حول الخبرة التي اكتسبتها أثناء العمل على نظام Azure App Service الأساسي. الجهاز الداخلي موثق هنا بالفعل - "التحويل المسبق لموقعك على الويب (C #)" ("التحويل المسبق لموقع على الويب في C #"). يجب أن تفهم الفرق بين الترجمة الآلية والصريحة. أيضًا ، إذا كنت تتعامل مع موقع ويب ASP.NET ، ففكر جديًا في التحويل المسبق باستخدام aspnet_compiler.exe ، كما هو موضح في كيفية: مواقع ويب ASP.NET المترجمة مسبقًا (كيفية ترجمة مواقع الويب مسبقًا ASP.NET ").

فيما يلي عدد من المنشورات التي ستساعدك على توسيع آفاقك حول هذه القضية واستكشاف مواضيع أخرى:


إذن ، أين بدأ كل شيء؟ أردت التحقق مما إذا كنت قد فهمت عملية تجميع وحدات ASP.NET في تجميعات بشكل صحيح ، وقررت القيام بذلك في بيئة خدمة تطبيقات Azure. لقد كان لدي بالفعل مفهوم حول ملفات ASP.NET المؤقتة ، وحول تجميع ملفات ASPX في تجميع .dll ، وحول مكان تخزينها على خادم مستقل. كنت متأكدًا من أنه تم تنفيذ النقطتين الأوليتين بطريقة مماثلة على منصة خدمة التطبيقات ، لكنني شككت في الثالثة - أي ، حيث يتم تخزين التجميعات المجمعة. لذا كتبت رمزًا لمعرفة ذلك.

public partial class _default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { LabelFileLocation.Text = $"{System.Web.HttpRuntime.CodegenDir}"; rptResults1.DataSource = System.IO.Directory.GetFiles(System.Web.HttpRuntime.CodegenDir, "*.dll"); rptResults1.DataBind(); } }      () <asp:Repeater ID="rptResults1" runat="server"> <HeaderTemplate><table></HeaderTemplate> <ItemTemplate> <tr> <td><%# Container.DataItem %></td> </tr> </ItemTemplate> <FooterTemplate></table></FooterTemplate> </asp:Repeater> 

ثم قمت بنشر هذا الرمز على منصة خدمة التطبيقات.

عندما دخلت إلى الموقع لأول مرة ، حصلت على النتيجة الموضحة في الشكل. 3 (كانت في الأصل في جذر موقع ASP.NET الخاص بي ثلاث صفحات)



التين. 3: تجميع موقع ويب ASP.NET على منصة خدمة تطبيقات Azure

قمت بإعادة تشغيل الموقع وتجميع الثنائيات في تجميع جديد (الشكل 4). كان هذا غير متوقع تمامًا ، حيث قمت بإعادة التشغيل فقط ولم أجري أي عمليات نشر أو تغييرات.



التين. 4: تجميع موقع ويب ASP.NET على منصة خدمة تطبيقات Azure

لقد بحثت في KUDU في دليل التجميع ولم أجده ؛ كان غريبا جدا.

بعد النقر على روابط "صفحة أخرى" و "صفحة أخرى" ، تم تجميع كل صفحاتي في تجميع واحد ، وفوجئت جدًا بالعثور على هذا لأنه تم تعيين debug = true في ملف web.config الخاص بي.

كنت بحاجة لمعرفة أجوبة الأسئلة التالية:

  1. لماذا تمت إعادة ترجمة تطبيقي بعد إعادة التشغيل ، على الرغم من أنني لم أجري أي تغييرات في النشر أو التكوين؟
  2. لماذا لم أجد التجميع في KUDU على الرغم من صحة كود المصدر الخاص بي؟
  3. لماذا تم تجميع طلبي في تجميع واحد ، على الرغم من تعيين debug = true في ملف web.config؟

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

قمت أيضًا بفرز السؤال الثاني بناءً على المعلومات التي تلقيتها بشأن السؤال الأول. سأحذف تفاصيل حول تكوين الملفات على النظام الأساسي لخدمة التطبيقات وأقول إنني تمكنت من عرض تجميعات مواقع الويب الخاصة بي على ASP.NET على هذا النظام الأساسي: لهذا قمت بتعيين WEBSITE_DISABLE_SCM_SEPARATION إلى true (انظر الشكل 5). افعل ذلك فقط للاختبار و (أو) التصحيح ولا أكثر. لا أوصي بتعيين صفحات متعددة من موقع ويب لعملية واحدة في App Service. بعد اكتمال التصحيح ، أعد تعيين هذه القيمة وافصل العمليات مرة أخرى.



التين. 5: تجميع موقع ASP.NET في خدمة تطبيقات Azure ؛ لا يمكنني العثور على ملفات ASP.NET مؤقتة على KUDU

كان الجواب على السؤال الثالث أنه في حالة وجود ملف Web.Debug.config ، يتم حذف السمة debug = true أثناء عملية النشر.

 <compilation xdt:Transform="RemoveAttributes(debug)" /> 

لقد كتبت عن ملفات XDT هنا ، هنا وهنا ، ولكن في هذه الحالة كان علي أن أفكر قليلاً لفهم (تذكر ، أدرك) معناها.

بعد ضبط WEBSITE_DISABLE_SCM_SEPARATION على true ، توقفت وأبدأ ، وبعبارة أخرى ، بداية باردة ... ورأيت أن كل من SCM / KUDU وموقع الويب الخاص بي قد بدأوا بالفعل في نفس العملية (الشكل 6.)



التين. 6: تجميع موقع ويب ASP.NET في خدمة تطبيقات Azure ؛ لا يمكنني العثور على ملفات ASP.NET مؤقتة على KUDU

يتم بدء النشر والتجميع لـ default.aspx ، ويظل اسم التجميع دون تغيير بعد كل الطلبات (الشكل 7).



التين. 7: تجميع موقع ويب ASP.NET على منصة خدمة تطبيقات Azure

للتحقق من ذلك ، قمت بتفريغ ذاكرة العملية ، وأخذت تفريغًا للوحدة النمطية ، وقمت بتحليلها. بصراحة ، ما زلت في حيرة من النتيجة التي عرضتها الجمعية ، لأنني اكتشفت المعلمة debug = true فقط بعد اكتمال جميع الاختبارات. أحيانًا أكتب مقالات بترتيب خاطئ تتبعها الأحداث. مرتبكًا ، قررت اختبار تجميع الدفعة ؛ اقرأ عنها هنا : "عنصر التجميع (مخطط إعدادات ASP.NET)" ("عنصر التجميع - مخطط معلمة ويب ASP.NET"). توقعت أن يتم تجميع تجميع واحد لكل صفحة ، لذلك كانت النتيجة (انظر الشكل 8) مفاجأة كاملة.



التين. 8: تجميع موقع ويب ASP.NET على منصة خدمة تطبيقات Azure

توقعت رؤية تجميع واحد لكل صفحة ، لأنني اعتقدت أنني أعمل مع المعلمة debug = true. عند القراءة عن التجميع الدفعي ، أدركت أنه يجمع كل الصفحات في التجميع الوارد في دليل معين. لذلك قمت بإنشاء دليلين ووضع ملفات .aspx في كل منهما. لم يتغير PID ، لذلك لم يكن هناك "بداية باردة" (الشكل 9).



التين. 9: تجميع موقع ويب ASP.NET على منصة خدمة تطبيقات Azure

ومع ذلك ، تم إعادة تجميع الموقع حقًا في ملف ثنائي آخر ، لكنه ظل في نفس الدليل (المسار) (الشكل 10).



التين. 10: تجميع موقع ويب ASP.NET على منصة خدمة تطبيقات Azure

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



التين. 11: تجميع موقع ويب ASP.NET على منصة خدمة تطبيقات Azure

لقد اتبعت رابط "الدليل 1" ورأيت تجميعًا آخر (الشكل 12).



التين. 12: تجميع موقع ويب ASP.NET على منصة خدمة تطبيقات Azure

قمت بتفريغ الذاكرة مرة أخرى ، وأزلت تفريغ الوحدة ورأيت أنها تتوافق حقًا مع صفحة "الدليل 1" (الشكل 13).



التين. 13: تجميع موقع ويب ASP.NET على منصة خدمة تطبيقات Azure

فعلت الشيء نفسه لصفحة الدليل 2 (الشكل 14 و 15).



التين. 14: تجميع موقع ويب ASP.NET على منصة خدمة تطبيقات Azure



التين. 15: تجميع موقع ويب ASP.NET على منصة خدمة تطبيقات Azure

كما أتيحت لي الفرصة للذهاب إلى التجمعات نفسها في SCM / KUDU (الشكل 16).



التين. 16: تجميع موقع ويب ASP.NET على منصة خدمة تطبيقات Azure

بمجرد أن اكتشفت المشكلة مع المعلمة debug = true ، سقط كل شيء في مكانه ، وكانت تجربة تعليمية جيدة. آمل أن تجد مقالتي مفيدة.



موارد مفيدة


دليل بنية التطبيقات السحابية


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

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


تنزيل

دليل مطور Azure




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


تنزيل

أساسيات Microsoft Azure


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

يتم تناول المواضيع التالية في هذا الكتاب:

  • الشروع في استخدام Azure ؛
  • خدمة تطبيق Azure وتطبيقات الويب ؛
  • الأجهزة الافتراضية ؛
  • خدمة التخزين ؛
  • قواعد البيانات
  • خدمات Azure إضافية.

تنزيل

روابط مفيدة


Source: https://habr.com/ru/post/ar421995/


All Articles