سؤال

كنت قادرا فقط على قراءة التغييرات ASP.NET تتغير إلى ملفات محددة مثل ملفات ASPX و DLLs وغيرها. سيتم إعادة تشغيل نفسها، إنهاء طلبات التشغيل الحالية والطلبات الجديدة مع الملفات المنتشرة الجديدة.

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

شكرا!

هل كانت مفيدة؟

المحلول

لديك 4 أسئلة هنا:ما يحدث في الوقت المناسب من الملف الأول الذي تم نسخه إلى آخر تم تبادله؟ - هناك وقت محدد أثناء انتظار .NET لمعرفة ما إذا كان قد تم تعديل أي ملفات أخرى قبل بدء تشغيل مجال التطبيق الجديد مع تحميل DLL الجديد.

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

سوف ينتظر ASP.NET لبعض الثواني ويبدأ فقط نفسها جديدة بعد X ثانية من أي تغييرات الملفات (ذات الصلة)؟ - نعم. لم أتمكن من العثور على كم من الوقت هو. ولكن في تجربتي الشخصية، في مكان ما في نطاق 1-2 ثاني.

لقد وجدت أيضا تفسيرا جيدا هنا على نطاق التطبيق وإعادة تحميل DLL:http://odetocode.com/articles/305.aspx.

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

عادة، عندما يتم تحميل DLL في عملية، تقوم العملية بإغلاق DLL ولا يمكنك الكتابة فوق الملف على القرص. ومع ذلك، فإن AppDomains لها ميزة تعرف باسم نسخة الظل التي تتيح التجميعات التي تظل مقفلة وقابلة للاستبدال على القرص.

تتم عملية تشغيل وقت التشغيل ASP.NET مع تمكين نسخة Shadow Directory لدليل BIN. سيقوم AppDomain بنسخ أي DLL التي تحتاجها من دليل BIN إلى موقع مؤقت قبل قفل وتحميل DLL في الذاكرة. تتيح لنا نسخة الظل الكتابة فوق أي DLL في دليل BIN أثناء التحديث دون إجراء تطبيق الويب دون اتصال بالإنترنت.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top