سؤال

هل متغير ثابت في خدمة ويب مشتركة بين جميع الدعاء تشغيل من خدمة ويب في الخادم؟

في حالتي أريد المزامنة للانغلاق على نطاق الخادم، وأنا أصدق أنني يمكن تحقيق ذلك مع واحد

private static Object syncHandle = new Object();

هل هذا صحيح؟

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

المحلول

نعم، أنها مشتركة في كل AppDomain وهذا هو السبب، بشكل عام، لا ينبغي أن تستخدم!

وأنها لا ينبغي أن تستخدم، بشكل عام، لأن من المستبعد جدا أن يتم استخدامها بشكل صحيح. أيضا لأن هناك بدائل أكثر أمانا، مثل HttpContext.Cache، أو حتى حالة جلسة العمل.

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

وبالإضافة إلى ذلك، يبدو أنك تعني الخدمات ASMX على شبكة الإنترنت، ولكن يجب تحديد ASMX أو WCF.

نصائح أخرى

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

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

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