2012-11-14 11 views
8

में सरल आईओसी के साथ डब्ल्यूसीएफ सेवा क्लाइंट को पंजीकृत करते समय एंडपॉइंट पता प्रदान नहीं कर सकता है मैं सहायता एमवीवीएम लाइट टूलकिट 4.1.24 के साथ एक डब्ल्यूपीएफ एप्लीकेशन विकसित कर रहा हूं। यहां मेरा व्यूमोडेल लोकेटर क्लास है।व्यूमोडेल लोकेटर

public class ViewModelLocator 
    { 
     /// <summary> 
     /// Initializes a new instance of the ViewModelLocator class. 
     /// </summary> 
     public ViewModelLocator() 
     { 
      ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default); 

      if (ViewModelBase.IsInDesignModeStatic) 
      { 
       // Create design time view services and models 
       SimpleIoc.Default.Register<IService1, DesignDataService>(); 
      } 
      else 
      { 
       // Create run time view services and models 
       SimpleIoc.Default.Register<IService1, Service1Client>(); 
      } 

      SimpleIoc.Default.Register<MainViewModel>(); 
     } 

     public MainViewModel Main 
     { 
      get 
      { 
       return ServiceLocator.Current.GetInstance<MainViewModel>(); 
      } 
     } 

     public static void Cleanup() 
     { 
      // TODO Clear the ViewModels 
      ServiceLocator.Current.GetInstance<MainViewModel>().Cleanup(); 
     } 
    } 

कहाँ

  • IService1 - एक WCF सेवा इंटरफ़ेस है

  • DesignDataService - डिजाइन उद्देश्य के लिए IService1 का कार्यान्वयन

  • Service1Client - WCF प्रॉक्सी वर्ग कि IService1

  • लागू

मैं दो प्रश्न हैं:

1) अनुप्रयोग चलाने करते हैं, मैं इस तरह "पंजीकरण नहीं कर सकता।: Service1Client में पाया एकाधिक कंस्ट्रक्टर्स लेकिन कोई भी PreferredConstructor के साथ चिह्नित" त्रुटि मिली है। इसके लिए मैंने सेवा 1 क्लाइंट डिफ़ॉल्ट कन्स्ट्रक्टर और अपेक्षित के रूप में चलाए गए एप्लिकेशन में "[पसंदीदा कॉन्स्ट्रास्ट्रक्टर एट्रिब्यूट]" विशेषता जोड़ा है। मैं जानता हूँ कि यह दो कारणों

  • के लिए एक अच्छा तरीका नहीं है यह SimpleIoc
  • करने के लिए एक निर्भरता जब भी मैं सेवा संदर्भ मैं मैन्युअल रूप से डिफ़ॉल्ट निर्माता को यह विशेषता जोड़ने के लिए अद्यतन परिणाम देगा।

तो क्या कोई बेहतर तरीका है?

2) मैं एंडपॉइंट पता को सर्विस 1 क्लाइंट मैन्युअल रूप से पास करना चाहता हूं। मैं उसे कैसे कर सकता हूँ?

अग्रिम धन्यवाद ...

+0

तो आप प्रश्न को हटाएं या एक उत्तर जोड़ें – Cybermaxs

उत्तर

1

आप endpoint पते जोड़ सकते हैं निम्न विधि द्वारा ग्राहक सेवा के लिए।

SimpleIoc.Default.Register (() => नई सेवा 1 क्लाइंट ("WSHttpBinding_IService", wcfConfig.EndpointUrl));

0

मुझे एक ही समस्या थी। This post ने मुझे ऐसा करने में मदद की। आपको इस तरह कुछ लिखना होगा:

SimpleIoc.Default.Register<MyServiceImplementation>(() => { 
    return new MyServiceImplementation("Hello World"); 
}); 

SimpleIoc.Default.Register<IMyService>(() => { 
    return SimpleIoc.Default.GetInstance<MyServiceImplementation>(); 
}); 
संबंधित मुद्दे