2012-12-16 28 views
11

मैंने आज डब्ल्यूसीएफ deserialization में त्रुटियों का सामना करना शुरू कर दिया है - कोड में जो अपरिवर्तित और महीनों के लिए काम कर रहा है।डब्लूसीएफ deserialization में XmlException: "स्वचालित संपत्ति बैकिंग फ़ील्ड्स में नाम '<' 'से शुरू नहीं हो सकता है

मुद्दा यह है कि मुझे रनटाइम XmlException कह रहा है कि 'नाम <' चरित्र 'से शुरू नहीं हो सकता है। मैंने .NET स्रोत में डीबग किया है, और ऐसा लगता है कि त्रुटि हमारे डब्ल्यूसीएफ सेवा कॉल से वापसी वस्तुओं को deserializing में है। इन ऑब्जेक्ट्स को स्वचालित गुणों का उपयोग करके परिभाषित किया जाता है, और ऐसा लगता है कि बैकिंग फ़ील्ड को <MyProperty>k_BackingField जैसे नाम दिए गए हैं, जहां XmlException आ रहा है।

मैंने कुछ अन्य संदर्भ ऑनलाइन देखे हैं जहां समाधान स्वीकार करते हैं "मैंने अपने गुणों को स्वचालित गुणों का उपयोग न करने के लिए बदल दिया है", जो वास्तव में मेरे लिए स्वीकार्य नहीं है, क्योंकि मेरे पास 100 वस्तुओं को बदलने के लिए , (उनके बीच गुणों के 1000s के साथ)। साथ ही, यह वही कोड ठीक काम कर रहा था जब मैंने पिछले सप्ताह इसे चलाया था, और ऐसा लगता है कि सभी धारावाहिक डीटीओ को प्रभावित नहीं किया जा रहा है, केवल कुछ ही।

इसे और भी निराशाजनक बनाने के लिए, यह हल्के से अस्थायी लगता है। इस सुबह अवसर पर, कोई अपवाद फेंक दिया गया है ...!

प्रश्न;

  1. यह समस्या अचानक अपरिवर्तित कोड और अपरिवर्तित ढांचे स्रोत में क्यों दिखाई दे रही है?
  2. पूरी तरह कार्यान्वित गुणों का उपयोग करने के लिए सभी डीटीओ को संशोधित किए बिना मैं इसे कैसे ठीक करूं?

अद्यतन: एक दिन बाद या ठीक काम कर रहा तो, इस मुद्दे को दोबारा प्रकट किया है - कोई कारण नहीं मैं मिल सकता है क्यों कि यह काम करेगा/काम नहीं/काम फिर से, लेकिन यहाँ हम कर रहे हैं।

मैंने ServiceKnownType विशेषता का उपयोग करके मेरे सेवा नियंत्रणों पर मेरे कुछ कोड से संबंधित होने के लिए समस्या को और नीचे ट्रैक किया है, जिसका उपयोग धारावाहिककरण के लिए ज्ञात प्रकारों को परिभाषित करने के लिए किया जाता है। ऐसा लगता है कि हालांकि त्रुटियों के साथ रिपोर्ट किए जाने वाले प्रकार सेवा कॉल का हिस्सा भी नहीं हैं, मैं उस समय बना रहा हूं, यह त्रुटि उन प्रकारों पर हो रही है जो इस ज्ञात प्रकार के प्रकाशन 'व्यवहार का हिस्सा हैं।

समस्या तब होती है जब मैं कुछ सेवा व्यवहार लागू करने के लिए कुछ प्रॉक्सी निर्माण कोड का उपयोग करता हूं;

IOperationBehavior innerBehavior = new PreserveReferencesOperationBehavior(
    description, this.preserveReferences, this.maxItemsInObjectGraph); 
innerBehavior.ApplyClientBehavior(description, proxy); 

मैं ApplyClientBehavior कोड डीबग कर सकते हैं नहीं के रूप में यह System.ServiceModel का हिस्सा है (या कर सकते हैं मैं?), लेकिन यह है कि विधि में कुछ सभी प्रकार मैं अपने ServiceKnownType विशेषता का उपयोग कर प्रकाशित किया है मान्य करने के लिए कोशिश कर रहा है, और में से कुछ पर टूट रहा है उन्हें XmlException के साथ। मेरे पास कोई विचार नहीं है कि क्यों कुछ प्रकार विफल रहे हैं - और केवल उनके गुणों के कुछ के लिए।

यह उन प्रकारों का एक उदाहरण है जो उनके खिलाफ त्रुटियों की रिपोर्ट कर रहे हैं; ><Id>k_BackingField cannot start with '<'

ताकि कक्षा में विवादास्पद कुछ भी नहीं है, और कोई विरासत पर विचार करने के -

[Serializable] 
public class MyDataObject 
{ 
    public ActivitySession(string id) 
    { 
     this.Id = id; 
     this.IsOpen = true; 
    } 

    public string Id { get; set; } 

    public bool IsValid { get; set; } 
} 

अपवाद Id के खिलाफ एक त्रुटि की सूचना दी। यह एक सेवा अनुबंध का भी हिस्सा नहीं है, केवल इसे पहले क्रमबद्ध करने के लिए ज्ञात प्रकार के रूप में प्रकाशित किया गया था।

यह अब काफी गूढ़ हो रहा है, इसलिए मुझे जवाब की उम्मीद नहीं है, लेकिन यह समस्या अपडेट हो रही है।

+0

क्या आप नमूना डेटाकंट्रैक्ट पोस्ट कर सकते हैं? –

+0

मैं इसे आगे बढ़ाने की कोशिश करूंगा जहां समस्या हो रही है। वर्तमान में, उसने फिर से काम करने का फैसला किया है ... :-( –

+0

इस समस्या को नवीनतम के साथ अपडेट किया गया है क्योंकि समस्या पुन: संसाधित हो रही है। मैंने अलग-अलग प्रकारों को त्रुटियों के रूप में रिपोर्ट क्यों किया है ... –

उत्तर

9

मुझे लगता है कि मुझे इस मुद्दे की व्याख्या करने में मदद करने के लिए और जानकारी मिली है, (कम से कम जहां तक ​​त्रुटि केवल कुछ प्रकारों पर दिखाई दे रही है)।

डीटीओ जो उनके खिलाफ अपवाद प्राप्त कर रहे हैं;

  • मेरी [ServiceKnownType] विशेषता
  • का हिस्सा साथ [Serializable]
  • नहीं चिह्नित के रूप में प्रकाशित [DataContract]

प्रकार के [DataContract] गुण जोड़ना साथ चिह्नित इस समस्या का समाधान। मुझे नहीं पता कि क्यों, और अभी भी कोई विचार नहीं है कि यह त्रुटि में में क्यों होती है, लेकिन यह पर संगत है।

+0

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

+0

वास्तव में सराहना करते हैं इस टिप ने मुझे अभी _a lot_ समय बचाया है। मेरा डीटीओ ** कभी भी ** [डेटाकंट्रैक्ट] 'विशेषता के साथ चिह्नित नहीं हुआ था और यह महीनों के लिए ठीक काम करता था। एक दिन मुझे इसे पुनरारंभ करना पड़ा और इस मुद्दे से मारा गया कहीं भी नहीं। विशेषता को फिर से जोड़ना इसे तुरंत हल किया। – chrnola

+1

इससे मुझे बहुत मदद मिली। मेरे मामले में, मेरे मूल वर्गों में से एक को [DataContract] विशेषता से सजाया नहीं गया था। –

0

मेरे पास अब एक कामकाज है, हालांकि यह कुछ ऐसा नहीं है जिसे मैं भरोसा कर सकता हूं -> डीटीओ जो समस्या का कारण बन रहे हैं [ServiceKnownType] प्रकाशक से हटा दिया गया है, जिससे त्रुटि दूर हो जाती है।

मुझे आश्चर्य है कि समस्या के सदस्य नामों के साथ क्या करना है, मुझे अपवाद मिल रहा है। अब तक मैंने इसे शिकायत की है;

  • Id
  • Address
  • UserName

यह उम्मीद करना उन विशेष संपत्ति के नाम, क्रमबद्धता या सेवा मॉडल में कहीं और उपयोग में हैं के कारण उन्हें अलग तरह से संकलित किया जा करने के लिए उचित हो सकता है, मेरा अनुमान।

+1

शायद बाहर नहीं निकलता है - की कोशिश की इन क्षेत्रों में से कुछ का नाम बदलने और 'MyID', 'BogusAddress', 'UserNameX' समस्या निश्चित रूप से प्रकार यद्यपि से संबंधित है के साथ एक ही समस्या है -। यह पसंद नहीं करता * ध्यान दिए बिना * कुछ * प्रकार में कुछ * नामों में से नाम क्या हैं ....! –