2009-06-17 5 views
11

एक क्लाइंट बनाना चाहते हैं जो सीरियलाइज्ड संदेश ऑब्जेक्ट्स को डब्ल्यूसीएफ के माध्यम से सर्वर पर वापस भेजता है।डब्ल्यूसीएफ क्लाइंट कॉन्फ़िगरेशन: मैं कैसे जांच सकता हूं कि एंडपॉइंट कॉन्फ़िगरेशन फ़ाइल में है या नहीं, और कोड पर फ़ॉलबैक नहीं है?

अंत-डेवलपर (विभिन्न विभाग) के लिए चीजों को आसान बनाने के लिए सबसे अच्छा होगा कि उन्हें क्लाइंट एंड पॉइंट डेटा सेट अप करने के लिए अपनी कॉन्फ़िगरेशन फ़ाइल को संपादित करने की आवश्यकता नहीं है।

यह कहा गया कि यह भी शानदार होगा कि एंडपॉइंट को क्लाइंट में एम्बेडेड/कड़ी-कोडित नहीं किया गया था।

एक मिश्रण परिदृश्य मुझे दिखाई देते हैं शुरू करने के लिए सबसे आसान समाधान मानेंगे:

IF (config में वर्णित) का उपयोग कॉन्फ़िग फ़ाइल हार्ड-कोडेड endpoint के लिए और वापस आने।

मुझे क्या पता चला है:

  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) 
} 

लेकिन वहाँ जांच (कोशिश के अलावा अन्य/पकड़) यदि कॉन्फ़िग फ़ाइल कि समाप्ति बिंदु की घोषणा की है देखने के लिए किसी भी तरह से है?

उपरोक्त विफल नहीं होगा अगर कॉन्फ़िगरेशन फ़ाइल में परिभाषित किया गया है, लेकिन सही कॉन्फ़िगर नहीं किया गया है? दो स्थितियों के बीच अंतर करने के लिए अच्छा होगा?

उत्तर

7

यहाँ जिस तरह से विन्यास फाइल पढ़ सकते हैं और एक आसान में डेटा लोड का प्रबंधन करने के लिए है वस्तु:

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 
    } 
} 

"सीएस" वस्तु "अंतिम बिंदु" नाम का एक संग्रह है कि आप सभी का उपयोग करने की अनुमति देता है सामने आ जाएगी गुण जो आप कॉन्फ़िगर फ़ाइल में पाते हैं।

सुनिश्चित करें कि आप "if" की "अन्य" शाखाओं का भी इलाज करते हैं और उन्हें विफल मामलों के रूप में व्यवहार करते हैं (कॉन्फ़िगरेशन अमान्य है)।

+0

धन्यवाद समाधान समाधान के लिए एलेक्स। (इच्छा एमएस फ्रेमवर्क के लिए इस तरह के तरीकों को जोड़ देगा।) –

+0

एलेक्स के दृष्टिकोण के साथ समस्या (मेरे लिए) यह है कि सिल्वरलाइट में सिस्टम नहीं लगता है। कॉन्फ़िगरेशन डीएलएल ... :(तो आप ' टी एक आसान तरीका में clientconfig पढ़ जो कोई कैसे सिल्वरलाइट में ऐसा करने के लिए,/बिना/अग्रिम में कोड में सामान hardwiring धन्यवाद पर किसी भी विचार है –

10

मैं 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 

     } 
+1

+1 अच्छा LINQified:।?!। अगर (serviceModelGroup! = null && serviceModelGroupClient.Endpoints.Cast ()। कोई भी (e => e.Contract == "Services.IContract")) (var contract = new contractClient()) { } अन्य सामान्य का उपयोग करें –

संबंधित मुद्दे

 संबंधित मुद्दे