كيف يمكنني تنفيذ "تأمين متشائمة" في asp.net التطبيق ؟

StackOverflow https://stackoverflow.com/questions/617934

  •  03-07-2019
  •  | 
  •  

سؤال

أود الحصول على بعض النصائح من أي شخص من ذوي الخبرة مع تنفيذ شيء من هذا القبيل "تأمين متشائمة" في asp.net التطبيق.هذا هو سلوك أنا أبحث عن:

  1. المستخدم يفتح النظام #313
  2. المستخدم " ب " محاولات فتح النظام #313 ولكن قيل أن المستخدم قد فتحت حصريا X دقيقة.

حيث لم تنفذ هذه الوظيفة من قبل لدي تصميم بعض الأسئلة:

  • ما هي البيانات التي يجب أن نعلق على النظام القياسي ؟ أنا النظر في:
    • LockOwnedBy
    • LockAcquiredTime
    • LockRefreshedTime

وأود أن تنظر سجل مقفلة إذا LockRefreshedTime < (10 دقيقة).

  • كيف أضمن أن الأقفال ليست عقدت لمدة أطول من اللازم ولكن لا تنتهي بشكل غير متوقع أيضا ؟

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

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

المحلول

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

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

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

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

يُستخدم مصطلح "القفل الصريح" أيضًا لوصف وقت القفل هذا.

نصائح أخرى

وقد فعلت ذلك يدويا.

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

قفل الجدول يجب أن يكون تصميم مشابهة لهذه:

User_ID, //who locked
Lock_start_Time,
Locked_Row_ID(Entity_ID), //this is primary key of the table of locked row.
Table_Name(Entity_Name) //table name of the locked row.

المتبقية المنطق هو شيء يجب عليك معرفة.

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

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