سؤال

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

عندما يكون هناك ملف في المجلد App_Code، ولم يتم تجميع الموقع مسبقًا، فسيقوم iis بإنشاء أسماء ملفات عشوائية لهذه الملفات.

server1 "/ajax/SomeControl, App_Code.tjazq3hb.ashx"
server2 "/ajax/SomeControl, App_Code.wzp3akyu.ashx"

لذا، عندما يقوم مستخدم بنشر الصفحة ويتم نقله إلى الخادم الآخر، لا شيء يعمل.

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

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

المحلول

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

نصائح أخرى

هل قمت بتعيين العقدة <machinekey> على كلا الخادمين على نفس القيمة؟

يمكنك تجاوز ملف Machine.config في web.config لتعيين هذا.يجب أن يتطابق هذا وإلا فقد تواجه مواقف غريبة كهذه.

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

حسنًا، أول الأشياء أولًا..الشيء MachineKey صحيح.يجب أن يتم ضبط ذلك تمامًا على جميع الأجهزة المتوازنة التحميل.لا أتذكر كل ما يؤثر عليه، ولكن افعل ذلك على أي حال.

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

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

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

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

المشكلة الوحيدة التي يمكنني التفكير فيها والتي قد تواجهك هي الجلسة وحالة العرض.

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

يبدو أن هذا مخصص لتشفير ViewState فقط.ولا يؤثر على أسماء الملفات للتجميعات المترجمة تلقائيًا.

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

لا أعرف شيئًا عن ASP.NET AJAX (أستخدم أسلوب MonoRail NJS بدلاً من ذلك)، لكن حالة الجلسة قد تمثل مشكلة بالنسبة لك.

يجب عليك التأكد من أن حالات الجلسة قابلة للتسلسل، ولا تستخدم جلسة InMemory.ربما تحتاج إلى تشغيل ASP.NET Session State Server للتأكد من أن مزرعة الواجهة الأمامية بأكملها تستخدم نفس مساحة تخزين الجلسة.في مثل هذه الحالة، يجب أن تكون الجلسة قابلة للتسلسل بشكل مثالي (ولهذا السبب لا يُفضل أي كائن في الجلسة، يجب عليك دائمًا استخدام المعرف، وأراهن MS على هذا القيد عندما يقومون بتطوير مكتبة AJAX)

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