سؤال

أنا أبحث عن طرق لجعل تطبيقنا أكثر قابلية للتوسعة وأسهل في التعامل معه دون الحاجة إلى تغيير web.config (أو، في حالتنا، ملفات application.config، التي تحتوي على عقدة إعدادات التطبيقات).

إحدى الطرق التي فكرت بها هي الاحتفاظ بإعدادات التطبيق في جدول قاعدة البيانات الذي يحتوي على sqlcachedependancy.هذا يعني ذاك:

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

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

هل هناك طريقة جولة هذا؟

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

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

المحلول

أعتقد أنك قد سمرت اللاعبين الرئيسيين:

  • إما أن يكون لديك حق الوصول إلى نظام الملفات وأنك تضع جميع إعداداتك في عدد كبير من ملفات *.config هناك

أو:

  • ليس لديك حق الوصول (أو الوصول المحدود للغاية) إلى نظام ملفات الخادم، وبالتالي ربما يكون من الأفضل وضع إعدادات التكوين وتفضيلات المستخدم في قاعدة بيانات، دون ترك أي شيء سوى سلسلة الاتصال بملف التكوين على القرص

كلا النهجين لهما إيجابيات وسلبيات.لقد كنت أحاول لفترة طويلة العثور على طريقة "لتجسيد" قسم التكوين من حقل قاعدة البيانات، حتى أتمكن من استخدام ملف التكوين XML بشكل أساسي، ولكن تم تخزينه في حقل قاعدة البيانات.لسوء الحظ، فإن نظام تكوين .NET 2.0 بأكمله "مقفل" إلى حد كبير ويفترض فقط أن البيانات ستأتي من الملفات - ولا توجد طريقة للتوصيل على سبيل المثال.مزود قاعدة بيانات للسماح لنظام التكوين بقراءة محتوياته من حقل قاعدة البيانات :-( سيء للغاية حقًا!

النهج الآخر الوحيد الذي رأيته هو "ConfigurationService" في ملف تطبيق StockTrader 2.0 عينة مقدمة من Microsoft، ولكن بالنسبة لاحتياجاتي، بدا الأمر مبالغًا فيه وكأنه نظام فرعي معقد حقًا وثقيل الوزن حقًا.

نصائح أخرى

أنت استطاع استخدم SQLite، والذي سيكون بمثابة قاعدة بيانات قائمة بذاتها في ملف واحد.عصفورين بحجر واحد؟

إذا قمت بالإشارة إلى ملف تكوين خارجي يحتوي على إعدادات التطبيقات (مع ترك كل شيء آخر في ملف app.config العادي)، فأعتقد أن تحريره يؤدي فقط إلى إعادة تحميل هذه الإعدادات، ولا يفرض إعادة تشغيل التطبيق بالكامل.

هناك سؤال مماثل حول هذا الموضوع هنا:ملفات app.config (web.config) المتداخلة

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

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

يحرر:القليل من المعلومات الإضافية:

تؤدي تغييرات التكوين إلى إعادة تشغيل مجال التطبيق

من MSDN:

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

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

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