2009-01-29 15 views
8

किस कारण से डब्ल्यूसीएफ को मुझे "खाली" तत्काल वस्तु वापस करनी चाहिए जब यह तार पर जाने से पहले मेरे डब्ल्यूसीएफ सेवा रिटर्न पर स्पष्ट रूप से पॉप्युलेट हो गया था?डब्ल्यूसीएफ से "खाली" के रूप में लौटने वाली कस्टम ऑब्जेक्ट?

उदाहरण के लिए

एक सरल OperationContract विधि:

response.Client = new Client(); 
response.Client.ID = 99; 
return response; 

एक "खाली" क्लाइंट ऑब्जेक्ट (ग्राहक प्राप्त अंत पर) और सभी क्षेत्रों या तो शून्य या शून्य कर रहे हैं। हालांकि प्रतिक्रिया से ठीक पहले, अगर मैं प्रतिक्रिया का निरीक्षण करता हूं। क्लाइंट.आईडी 99 के साथ आबादी है?

बस मामले को बदतर बनाने के लिए, मैं एक त्रुटि वस्तु है और मैं इस तरह के रूप पॉप्युलेट:

response.Errors.Add(new CodedError(Errors.ErrorCodes.LOGIN_AUTHENTICATION_ERROR)); 

हालांकि मैं इस के साथ प्राप्त अंत पर त्रुटि सूची देख सकते हैं?

उत्तर

8

अगर कोई इस समस्या का सामना करता है, तो मुझे ठीक पता चला है। व्यावसायिक आवश्यकताओं के कारण मैंने अपनी कस्टम कक्षा को [Serializable] और [DataContract] दोनों के साथ चिह्नित किया था, यह संभवतः .NET 3.5 SP1 के रूप में अवैध रूप से प्रतीत होता है?

मेरे पास एक दोस्त है जो इन दोनों विशेषताओं के साथ डब्ल्यूसीएफ ऑब्जेक्ट्स भेज रहा है .NET 3.5 SP1 और यह ठीक काम कर रहा है। दिलचस्प।

एफवाईआई, मैंने केवल [Serializable] का उपयोग किया और यह मेरे ऑब्जेक्ट ग्राफ को सही तरीके से भेज रहा है। मुझे ट्रैक के नीचे एक्सएमएल क्रमबद्धता के लिए इसकी आवश्यकता थी।

यह एक दर्दनाक मुद्दा लेकिन खुशी है कि यह अब अंत में कार्य कर रहा है ....

+1

[डेटामेम्बर] के साथ क्या हुआ, क्या आप उन्हें [Serializable] में भी बदलते हैं? – sebagomez

3

क्या आपकी वस्तु [Serializable] के रूप में चिह्नित है या यह एक [DataContract] है? आपको अपनी वस्तु को एक या दूसरे के रूप में चिह्नित करने की आवश्यकता है।

डब्ल्यूसीएफ केवल जानता है कि तार में प्राइमेटिव या धारावाहिक वस्तुओं को कैसे पारित किया जाए।

+0

हाँ मॉडल दोनों के रूप में चिह्नित किया गया है वास्तव में, जैसा कि मैंने ग्राहक अंत पर क्रमबद्धता की जरूरत दायर करने के लिए बचाने के लिए प्रदर्शन किया जाना है। – GONeale

+0

दिलचस्प। मुझे इस बिंदु पर कुछ भी नहीं मिला। इसके बारे में कुछ और सोचेंगे। –

+0

एनपी। मेरे मॉडल को देखना मुश्किल नहीं है, लेकिन यह एक सुंदर मानक मॉडल है हालांकि कोई मान लेगा, ठीक है, त्रुटि मॉडल काम करता है। ग्राहक मॉडल काम नहीं करता है। मॉडलों के बीच असंगतताएं हैं, इसलिए मैं इसे वापस करने की कोशिश कर रहा हूं क्योंकि क्लाइंट के पास एक और कस्टम ऑब्जेक्ट है, और देखें कि यह क्या करता है ... – GONeale

2

क्या क्लाइंट प्रॉक्सी अद्यतित है? मैंने देखा है कि जब अनुबंध बदलता है और ग्राहक को परिवर्तन को दर्शाने के लिए अद्यतन नहीं किया जाता है।

+0

टिप्पणियों के लिए धन्यवाद मैटके, जैसा कि आप देख सकते हैं कि मैंने यह काम किया था :( – GONeale

1

था मैं एक ही मुद्दा था। मैंने सर्वर-साइड ऑब्जेक्ट्स पर नेमस्पेस बदल दिया था और हालांकि मैंने सर्विस रेफरेंस कॉन्फ़िगरेशन को अपडेट किया था, नेमस्पेस पुराने नामस्थान के करीब दिख रहा था, इसलिए फिडलर ने पुष्टि की कि डेटा को तार में सही ढंग से स्थानांतरित किया जा रहा है, डेटा पास नहीं हुआ था मेरे ग्राहक वस्तु के लिए। सेवा संदर्भ को हटाने और पुनः जोड़ने से चाल

2

बहुत देर हो सकती है, लेकिन इस विशेष समस्या के लिए एक आसान फिक्स है। कम से कम किसी को यह उपयोगी लगेगा।

मेरे पास अलग-अलग नामस्थानों के साथ 2 परियोजनाएं हैं।

  1. MyProject.Business.Entities ([DataContract] साथ चिह्नित किए गए)
  2. MyProject.Client.Entities (व्यापार की वस्तुओं का प्रतिनिधित्व करने के क्लाइंट साइड संस्थाओं) AssemblyInfo.cs

उपयोग और प्रत्येक व्यापार और ग्राहक परियोजनाओं के लिए निम्नलिखित पंक्ति जोड़ें।

[assembly: ContractNamespace("http://www.tempuri.org/MyProject", 
           ClrNamespace = "MyProject.Business.Entities")] 

[assembly: ContractNamespace("http://www.tempuri.org/MyProject", 
           ClrNamespace = "MyProject.Client.Entities")] 

वैकल्पिक रूप से, आप यह भी कर सकते हैं।

[DataContract (Namespace = "http://www.tempuri.org/MyProject")] 
public class Account 
{} 
संबंधित मुद्दे