2010-10-25 7 views
9

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

[DataContract] 
public class A 
{ 
    [DataMember] 
    public String name { get; set; } 
    [DataMember] 
    public List<B> BList {get; set; } 

    public A() 
    { 
     BList = new List<B>(); 
    } 
} 

मेरे समस्या यह है कि ग्राहक पर, इस इन्स्टेन्शियशन नहीं होता है और blist के बाद के रूप में प्रकट होता है अशक्त का एक ऑब्जेक्ट क्लाइंट पर बनाया गया है। मुझे लगता है कि निर्माता पर क्लाइंट दिखाई नहीं देता है। तो, क्या मुझे कन्स्ट्रक्टर को एक स्पष्ट ऑपरेशन अनुबंध बनाने की ज़रूरत है? यदि ऐसा है जो क्लाइंट को आंतरिक चीजें दिखाई देगी जो उन्हें नहीं देखना चाहिए, है ना? मैं कैसे सुनिश्चित करूं कि क्लाइंट पर यह त्वरण होता है?

धन्यवाद, और खेद है कि यह एक बेवकूफ सवाल की तरह लगता है।

उत्तर

2

मैं अगर वहाँ यह करने के लिए एक रास्ता है यकीन नहीं है, लेकिन सेवा सूची प्रारंभ किया जाना चाहिए से नया उदाहरण हो रही द्वारा, मेरा सुझाव है निम्नलिखित

  • लिखें वेब विधि है कि एक नया उदाहरण देता है अपने वर्ग के और आपको निम्न के रूप में उपयोग कर सकते हैं और मुझे यकीन है कि अपनी सूची

आरंभ नहीं हो जाता उदाहरण बनाने के लिए कर रहा हूँ:

A a = new ServiceClient.CreateAInstance(); 

सेवा में विधि लिखते हैं,

[OperationContract] 
public A CreateAInstance() 
{ 
    return new A(); 
} 
+0

धन्यवाद। यह संभवतः काम करेगा लेकिन क्लाइंट को तुरंत ऑब्जेक्ट को चालू करने के लिए वेब विधि को कॉल करके बोझ देगा। –

3

आप [OnDeserializing] या [OnDeserialized] DataContract प्रकार के प्रारंभ करने के लिए विशेषताओं का उपयोग करने की आवश्यकता है। http://msdn.microsoft.com/en-us/library/ms733734.aspx

+0

क्षमा करें, बस देखा कि समस्या उस से गहरी है - आप क्लाइंट को स्थानांतरित करने के लिए ब्लिस्ट प्रारंभिकता के * व्यवहार * चाहते हैं। दुर्भाग्यवश, ऐसा करने का कोई अंतःक्रियात्मक तरीका नहीं है (एक्सएसडी/डब्लूएसडीएल/आदि इस तरह के अर्थशास्त्र का वर्णन करने की अनुमति नहीं देते हैं), लेकिन आप निश्चित रूप से शेयर प्रकारों को साझा कर सकते हैं (उदाहरण के लिए अपने प्रकार को MyDataContracts.dll में डालें और svcutil /r:MyDataContracts.dll करें) यदि आप अपने समाधान की वास्तव में decoupled/SOA प्रकृति को तोड़ने में कोई फर्क नहीं पड़ता ... –

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

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