تكوين عميل WCF: كيف يمكنني التحقق مما إذا كانت نقطة النهاية في ملف التكوين ، والتراجع إلى التعليمات البرمجية إن لم يكن؟

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

سؤال

تتطلع إلى إنشاء عميل يرسل كائنات الرسائل المسلسل إلى الخادم عبر WCF.

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

ومع ذلك ، سيكون من الرائع أيضًا أن نقطة النهاية لم يتم تضمينها/ترميزها في العميل أيضًا.

سيظهر لي سيناريو المزيج ليكون أسهل حل للطرح:

إذا (الموصوفة في التكوين) ، استخدم ملف التكوين الآخر إلى نقطة النهاية المرمزة.

ما اكتشفته هو:

  1. new Client(); يفشل إذا لم يتم العثور على تعريف ملف التكوين.
  2. new Client(binding,endpoint); يعمل

وبالتالي:

Client client;
try {
  client = new Client();
}catch {
  //Guess not defined in config file...
  //fall back to hard coded solution:
  client(binding, endpoint)
}

ولكن هل هناك أي طريقة ل التحقق من (بخلاف Try/Catch) لمعرفة ما إذا كان ملف Config لديه نقطة نهاية معلنة؟

هل ستفشل أعلاه أيضًا إذا تم تعريفه في ملف التكوين ، ولكن لم يتم تكوينه بشكل صحيح؟ هل سيكون من الجيد التمييز بين الشرطين؟

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

المحلول

فيما يلي طريقة لقراءة ملف التكوين وتحميل البيانات إلى كائن سهل لإدارة:

Configuration c = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
ConfigurationSectionGroup csg = c.GetSectionGroup("system.serviceModel");
if (csg != null)
{
    ConfigurationSection css = csg.Sections["client"];
    if (css != null && css is ClientSection)
    {
        ClientSection cs = (ClientSection)csg.Sections["client"];
        //make all your tests about the correcteness of the endpoints here
    }
}

سيعرض كائن "CS" مجموعة تسمى "نقاط النهاية" تتيح لك الوصول إلى جميع الخصائص التي تجدها في ملف التكوين.

تأكد من التعامل مع فروع "Else" لـ "if" ومعاملةها كحالات فشل (التكوين غير صالح).

نصائح أخرى

أود أن أقترح نسخة محسنة من Alexdrenea الحل ، الذي يستخدم أنواعًا خاصة فقط لأقسام التكوين.

Configuration configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
        ServiceModelSectionGroup serviceModelGroup = ServiceModelSectionGroup.GetSectionGroup(configuration);
        if (serviceModelGroup != null)
        {
            ClientSection clientSection = serviceModelGroup.Client;
            //make all your tests about the correcteness of the endpoints here

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