سؤال

1 وظيفة على ستاكوفيرفلوو, نأمل أن يكون لها ردود فعل كبيرة :)

أنا حاليا أحاول أن توازن الحمل موقعنا على شبكة الإنترنت.أنشأنا 2 الكتلة NLB على نظام التشغيل windows server 2003 مع IIS 6.

أثناء اختبار الإعداد ، وجدت أن في بعض الأحيان ، دورتنا المفقودة.يوم ونصف في وقت لاحق ، وهنا النتيجة:

  1. نعم ، لدينا آلة.التكوين لديهما نفس التشفير/فك التشفير المفتاح.
  2. نعم معرف في iis metabase.xml هي نفسها لكل آلة.في الحقيقة الملف بأكمله هي نفسها ، باستثناء "AdminACL".
  3. كل تطبيق ويب يتم تعيين مع "StateServer" كل لافتا في نفس الجهاز.

من تلك النقطة, البحث على جوجل يعطي أقل المعلومات والحلول الممكنة.

ما أعرف لا يوجد نمط معين يسبب هذه المشكلة.يحدث فقط مرة واحدة في كل حين.

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

حيث طلب عدد س كان المرسلة من العميل ، مع كوكي الدورة تم تعيين كل شيء بسلاسة.طلب عدد x+1 المرسلة من العميل ، مع كوكي, ولكن الدورة لم يتم العثور على.

كل طلب على نفس الجهاز في NLB.

هنا مقتطف من asp أثر.axd:

1 الطلب:

تفاصيل الطلب معرف جلسة العمل:j2ffvy45updpc52uhw1mbg55 نوع الطلب:الحصول على وقت الطلب:11/26/2008 2:58:06 PM رمز الحالة:200 طلب الترميز:Unicode (UTF-8) استجابة الترميز:Unicode (UTF-8)

طلب ملفات تعريف الارتباط جمع

اسم القيمة الحجم

ASP.NET_SessionId j2ffvy45updpc52uhw1mbg55 42 المساعدات 22 9

رد ملفات تعريف الارتباط جمع

اسم القيمة الحجم

رؤوس جمع

اسم القيمة

كوكي ASP.NET_SessionId=j2ffvy45updpc52uhw1mbg55;المعونة=22

الطلب 2:

تفاصيل الطلب معرف جلسة العمل:نوع الطلب:بعد وقت الطلب:11/26/2008 2:58:08 PM رمز الحالة:
طلب الترميز:Unicode (UTF-8) استجابة الترميز:

طلب ملفات تعريف الارتباط جمع

اسم القيمة الحجم

رد ملفات تعريف الارتباط جمع

اسم القيمة الحجم

رؤوس جمع اسم القيمة كوكي ASP.NET_SessionId=j2ffvy45updpc52uhw1mbg55;المعونة=22

كما ترون في الطلب 2 الكوكيز المرسلة من العميل ، ولكن asp يبدو أبدا إضافة ملفات تعريف الارتباط في "طلب مجموعة ملفات تعريف الارتباط".أعتقد أن هذا هو السبب في أنه لا يجد الدورة.

فلماذا كوكي لم يتم تعيينها إلى الجلسة ؟ هو أن المشكلة ؟ هي المشكلة في مكان آخر ؟

لا تتردد في طرح أي توضيحات.

شكرا لكم جميعا على ردود الفعل الخاصة بك.

JF

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

المحلول

وأخيرا وجدت الجواب على مشكلتي.إنه الأصل في تطبيق قانون (مثل 99% من مبرمج 3rd الطرف أدوات 'أخطاء').قررت بعد ذلك على أي حال في حالة شخص في سيناريو مماثل.

هذا الرمز جزءا من WebServiceRequester الدرجة.خدمة ويب الطالب الدرجة instanciated عند الدورة تم حفظه في الدورة.أثناء إنشاء ونحن initalizate الأعضاء 'm_webServiceURL', و هذا العضو هو حفظها في الدورة بعد.حيث كانت قيمة هذا العضو تهيئة كان اعتمادا على الإعداد على الجهاز المحلي.

الجزء المهم هو ما يلي:WebServiceRequester فئة يحتوي على خدمة ويب الكائنات.خدمة ويب الأشياء لا يمكن أن يتم حفظها في الدورة ، فهي ليست تسلسل في asp.العقار كان [NonSerialized] سمة على ذلك.لذلك في كل مرة يمكننا الوصول إلى 'خدمة ويب' الملكية من وجوه الأول خلال دورة حياة الصفحة ، كان علينا أن إنشاء واحدة جديدة و تعيين ot أنه url 'm_webServiceURL' التي تم حفظها في الدورة.لذلك ترى, خدمة ويب جديدة كائن ، وربما آلة مختلفة ، وهذا يعني وضع مختلف على كل آلة.

حتى هنا هو ما حدث:مربع 29 تم تعيين الوصول إلى خدمة ويب في localhost

مربع 30 تم تعيين الوصول إلى خدمة ويب كما 192.168.253.29.

من الناحية الفنية, وكلاهما يقع على نفس الجهاز.ولكن هنا هو السيناريو:

الدخول على مربع 29.m_webServiceURL هو localhost في الدورة.

[بعض الطلب على مربع 29 هنا]

NLB موازنة تجلب لنا على مربع 30.مربع 30 الأحمال انها دورة جديدة إنشاء خدمة ويب obect مع مضيف الويب عنوان الخدمة.مربع 30 قدم الطلب إلى الخطأ خدمة الإنترنت مما يؤدي إلى الدورة انتهت استثناء.

واحدة من مشكلة أثناء التصحيح ، أن الاتصالات المحلية لم يتم تسجيلها مع "مراقبة الشبكة".

ما يؤدي لي على أثر ، هو أننا لم يكن استثناء تسجيل الدخول مربع 29 سجل التتبع ، كما ينبغي أن يكون.

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

لديك يوم جيد.JF

نصائح أخرى

ليس بدقة إجابة على سؤالك, ولكن كنت قد حاولت ذلك باستخدام sql server الجلسة على المتجر ؟ (البحث على MSDN الدائم النصي بدلا من درجة الحرارة النصي التي يتم توفيرها مع asp.net)

لقد سمعت "أشياء سيئة" عن تنفيذ الدورة الخدمة ، وبالتالي لم تستخدم.لم يكن أي مشاكل الويب الزراعة مع sql server على أساس حل على الرغم من.

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

حسنا, إذا كنت تستخدم visual studio, على الأقل يمكنك اختبار مع MSDE (خفض نسخة من SQL Server الذي يأتي مع Visual Studio)...

قد تساعد في استبعاد الدولة مشاكل الخادم...

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

ربما هذه الدورة استكشاف الأخطاء وإصلاحها المادة سيساعد ؟

أو "استكشاف الأخطاء وإصلاحها الدورة القضايا ذات الصلة في ASP.NET"

أو "استكشاف الأخطاء وإصلاحها منتهية الصلاحية ASP.NET حالة جلسة العمل الخاصة بك الخيارات"

سوف تكون عرجاء وإعادة تكرار اقتراح MS SQL Server.تثبيت SQL Server Express وهو completeley مجانا للاستخدام التجاري فقط 3 هذه السلبيات التي لا ينبغي أن يكون مشكلة بالنسبة لك في هذه المرحلة :

  • ماكس 4GB حجم قاعدة البيانات
  • ماكس 1 الأساسية وحدة المعالجة المركزية المستخدمة
  • ماكس 1GB من ذاكرة الوصول العشوائي المستخدمة

عدد قليل من النقاط في الاعتبار:

  • ما هو الحمل على موقع الويب الخاص بك ؟ الدولة Server لديه ميل إلى تحطم عندما يواجه عدد كبير من المتزامنة يضرب.نحن فقط استخدام في سيناريوهات حيث لدينا عدد صغير من المستخدمين (في 10 الغالب النظم الخلفية).كلما حاولنا استخدامه في إنتاج مواقع تخدم 1000 من المستخدمين يوميا ، فإنه يتلف مما يؤدي إلى فقدان البيانات.
  • على واحدة من بيئات الإنتاج ندير نحن نستخدم MSSQL 2005 Express لإدارة جلسات الموقع 10K+ المستخدمين يوميا و 200 ألف+ صفحات في اليوم.هذا هو النهج الموصى به في حالة الدورة هو أن يقترن بإحكام في التطبيق الخاص بك.

إذا كنت على وشك المستخدم MSSQL التعبير عن مثل الدولة DB, تذكر أنه لا يأتي مع SQL Server عامل المعنى لا يوجد جدولة المهام التي تعمل في الخلفية و تنظيف انتهت جلسات.أنصح العثور على جدولة تشغيل نظيفة انتهت جلسات الإجراء المخزن بشكل دوري.

حظا سعيدا

بدلا من العبث مع SQL ، وإرسال الاختبارات الخاصة بك مباشرة إلى واحدة من العقد IIS لمعرفة ما إذا كنت لا تزال تحصل على نفس القضية.أنا متأكد إذا كانت تفعل سوى عدد قليل من الاختبارات StateServer لن تكون المسألة.

محاولة وضع اسم المجال asp.net_sessionid من خلال رمز ".yourdomain.com".بشكل افتراضي ASP.net_SessionID كوكي اسم المجال هو التطبيق الكامل المسار.لذا قد يكون هذا أحد الأسباب كوكي ليس السفر.

E. g.طلب.ملفات تعريف الارتباط["ASP.NET_SessionId"].Domain = ".yourdomain.com".تذكر أول "." من المهم في اسم المجال.

هل يمكن أن تفعل هذا في HttpModule في AcquireRequestState الحدث.

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