c# डब्ल्यूसीएफ सेवा संदर्भ-"XmlException प्राप्त करना: नाम '<' वर्ण से शुरू नहीं हो सकता है, हेक्साडेसिमल मान 0x3C" क्लाइंट साइड पर




.net wcf (4)

मेरे पास एक स्मार्ट क्लाइंट एप्लिकेशन है जो डब्ल्यूसीएफ के माध्यम से अपने सर्वर से संचार कर रहा है। डेटा क्लाइंट पर बनाया गया है और फिर सेवा को जारी रखने के लिए भेजा गया है। सर्वर और क्लाइंट एक साझा डीएलएल के माध्यम से एक ही डोमेन कक्षाओं का उपयोग करते हैं और मैं विजुअल स्टूडियो में आसान "सेवा संदर्भ जोड़ें" कार्यक्षमता का उपयोग कर रहा हूं जो SvcUtil.exe को लपेटता है और क्लाइंट और प्रॉक्सी कक्षाएं उत्पन्न करता है।

सेवा को कॉल करने का प्रयास करते समय मुझे निम्न त्रुटि मिलती है:

System.Xml.XmlException occurred
  Message=Name cannot begin with the '<' character, hexadecimal value 0x3C.
  Source=System.Xml
  LineNumber=0
  LinePosition=1
  StackTrace:
       at System.Xml.XmlConvert.VerifyNCName(String name, ExceptionType exceptionType)
  InnerException: 

यह विशेष रूप से परेशानी है क्योंकि यह सेवा बिना किसी त्रुटि के सप्ताहों तक काम करेगी और फिर अचानक और चेतावनी के बिना यह फिर से दिखाई देगी। मैं यह समझने में सक्षम नहीं हूं कि इसका क्या कारण है। जब ऐसा होता है, तो मैं इसे ठीक करने के तरीके में शोध करने में गहरा गोता लगाऊंगा और आम तौर पर उन लोगों की तुलना में कुछ भी नहीं आऊंगा जिन्होंने वास्तव में xml प्रोग्रामेटिक रूप से चीजों को क्रमबद्ध करने की कोशिश करते हुए एक ही त्रुटि का अनुभव किया है। मैं इस डेटा को आजमाने और भेजने के लिए जेनरेट क्लाइंट और प्रॉक्सी के अलावा कुछ भी नहीं उपयोग कर रहा हूं।

मैंने अपने समाधान के Service References\AwesomeService फ़ोल्डर में जेनरेट प्रॉक्सी में देखा है और सामान्य से बाहर कुछ भी नहीं दिखता है। जेनरेट की गई फाइलों में कोण ब्रैकेट की एकमात्र घटनाएं हैं:

  • * .svcinfo में xml टैग, Reference.svcmap, AwesomeService.disco, AwesomeService.wsdl और * .xsd फ़ाइलें
  • Reference.cs फ़ाइल में जेनेरिक संग्रह के लिए तर्क

मैं जिस कोड को सेवा कॉल करने के लिए उपयोग कर रहा हूं वह ऐसा है:

using (var client = new AwesomeServiceClient())
{
    client.SaveAwesomeness(instanceOfAwesomeness);
}

यह ऊपर सूचीबद्ध कॉलिंग कोड के ऊपर पहले फ्रेम के साथ भिखारी है:

System.Xml.dll!System.Xml.XmlConvert.VerifyNCName(string name, System.Xml.ExceptionType exceptionType) + 0xb5 bytes 
System.Runtime.Serialization.dll!System.Runtime.Serialization.DataContract.IsValidNCName(string name) + 0x27 bytes  
System.Runtime.Serialization.dll!System.Runtime.Serialization.DataContract.EncodeLocalName(string localName) + 0x1d bytes   
System.Runtime.Serialization.dll!System.Runtime.Serialization.ClassDataContract.ClassDataContractCriticalHelper.ImportDataMembers() + 0x2e1 bytes   
System.Runtime.Serialization.dll!System.Runtime.Serialization.ClassDataContract.ClassDataContractCriticalHelper.ClassDataContractCriticalHelper(System.Type type) + 0x10d bytes 
System.Runtime.Serialization.dll!System.Runtime.Serialization.DataContract.DataContractCriticalHelper.CreateDataContract(int id, System.RuntimeTypeHandle typeHandle, System.Type type) + 0x198 bytes   
System.Runtime.Serialization.dll!System.Runtime.Serialization.DataContract.DataContractCriticalHelper.GetDataContractSkipValidation(int id, System.RuntimeTypeHandle typeHandle, System.Type type) + 0x57 bytes 
System.Runtime.Serialization.dll!System.Runtime.Serialization.XmlObjectSerializerContext.GetDataContract(int id, System.RuntimeTypeHandle typeHandle) + 0x37 bytes  
System.Runtime.Serialization.dll!System.Runtime.Serialization.XmlObjectSerializerWriteContext.InternalSerialize(System.Runtime.Serialization.XmlWriterDelegator xmlWriter, object obj, bool isDeclaredType, bool writeXsiType, int declaredTypeID, System.RuntimeTypeHandle declaredTypeHandle) + 0x49 bytes    
[Lightweight Function]  
System.Runtime.Serialization.dll!System.Runtime.Serialization.ClassDataContract.WriteXmlValue(System.Runtime.Serialization.XmlWriterDelegator xmlWriter, object obj, System.Runtime.Serialization.XmlObjectSerializerWriteContext context) + 0x25 bytes 
System.Runtime.Serialization.dll!System.Runtime.Serialization.XmlObjectSerializerWriteContext.WriteDataContractValue(System.Runtime.Serialization.DataContract dataContract, System.Runtime.Serialization.XmlWriterDelegator xmlWriter, object obj, System.RuntimeTypeHandle declaredTypeHandle) + 0x18 bytes   
System.Runtime.Serialization.dll!System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeWithoutXsiType(System.Runtime.Serialization.DataContract dataContract, System.Runtime.Serialization.XmlWriterDelegator xmlWriter, object obj, System.RuntimeTypeHandle declaredTypeHandle) + 0x49 bytes  
System.Runtime.Serialization.dll!System.Runtime.Serialization.DataContractSerializer.InternalWriteObjectContent(System.Runtime.Serialization.XmlWriterDelegator writer, object graph, System.Runtime.Serialization.DataContractResolver dataContractResolver) + 0xdf bytes  
System.Runtime.Serialization.dll!System.Runtime.Serialization.DataContractSerializer.InternalWriteObject(System.Runtime.Serialization.XmlWriterDelegator writer, object graph, System.Runtime.Serialization.DataContractResolver dataContractResolver) + 0x26 bytes 
System.Runtime.Serialization.dll!System.Runtime.Serialization.XmlObjectSerializer.WriteObjectHandleExceptions(System.Runtime.Serialization.XmlWriterDelegator writer, object graph, System.Runtime.Serialization.DataContractResolver dataContractResolver) + 0x60 bytes    
System.Runtime.Serialization.dll!System.Runtime.Serialization.XmlObjectSerializer.WriteObject(System.Xml.XmlDictionaryWriter writer, object graph) + 0x2d bytes 
System.ServiceModel.dll!System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.SerializeParameterPart(System.Xml.XmlDictionaryWriter writer, System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.PartInfo part, object graph) + 0x38 bytes 
System.ServiceModel.dll!System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.SerializeParameter(System.Xml.XmlDictionaryWriter writer, System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.PartInfo part, object graph) + 0xbe bytes 
System.ServiceModel.dll!System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.SerializeParameters(System.Xml.XmlDictionaryWriter writer, System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.PartInfo[] parts, object[] parameters) + 0x3e bytes  
System.ServiceModel.dll!System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.SerializeBody(System.Xml.XmlDictionaryWriter writer, System.ServiceModel.Channels.MessageVersion version, string action, System.ServiceModel.Description.MessageDescription messageDescription, object returnValue, object[] parameters, bool isRequest) + 0x68 bytes   
System.ServiceModel.dll!System.ServiceModel.Dispatcher.OperationFormatter.SerializeBodyContents(System.Xml.XmlDictionaryWriter writer, System.ServiceModel.Channels.MessageVersion version, object[] parameters, object returnValue, bool isRequest) + 0x7b bytes   
System.ServiceModel.dll!System.ServiceModel.Dispatcher.OperationFormatter.OperationFormatterMessage.OperationFormatterBodyWriter.OnWriteBodyContents(System.Xml.XmlDictionaryWriter writer) + 0x4f bytes    
System.ServiceModel.dll!System.ServiceModel.Channels.BodyWriter.WriteBodyContents(System.Xml.XmlDictionaryWriter writer) + 0xf8 bytes   
System.ServiceModel.dll!System.ServiceModel.Channels.BodyWriterMessage.OnBodyToString(System.Xml.XmlDictionaryWriter writer) + 0x1f bytes   
System.ServiceModel.dll!System.ServiceModel.Channels.Message.ToString(System.Xml.XmlDictionaryWriter writer) + 0xaa bytes   
System.ServiceModel.dll!System.ServiceModel.Diagnostics.MessageLogTraceRecord.WriteTo(System.Xml.XmlWriter writer) + 0x166 bytes    
System.ServiceModel.dll!System.ServiceModel.Diagnostics.MessageLogger.LogInternal(System.ServiceModel.Diagnostics.MessageLogTraceRecord record) + 0x77 bytes    
System.ServiceModel.dll!System.ServiceModel.Diagnostics.MessageLogger.LogMessageImpl(ref System.ServiceModel.Channels.Message message, System.Xml.XmlReader reader, System.ServiceModel.Diagnostics.MessageLoggingSource source) + 0x104 bytes  
System.ServiceModel.dll!System.ServiceModel.Diagnostics.MessageLogger.LogMessage(ref System.ServiceModel.Channels.Message message, System.Xml.XmlReader reader, System.ServiceModel.Diagnostics.MessageLoggingSource source) + 0x3a bytes   
System.ServiceModel.dll!System.ServiceModel.Channels.ServiceChannel.PrepareCall(System.ServiceModel.Dispatcher.ProxyOperationRuntime operation, bool oneway, ref System.ServiceModel.Dispatcher.ProxyRpc rpc) + 0x436 bytes 
System.ServiceModel.dll!System.ServiceModel.Channels.ServiceChannel.Call(string action, bool oneway, System.ServiceModel.Dispatcher.ProxyOperationRuntime operation, object[] ins, object[] outs, System.TimeSpan timeout) + 0x12b bytes    
System.ServiceModel.dll!System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(System.Runtime.Remoting.Messaging.IMethodCallMessage methodCall, System.ServiceModel.Dispatcher.ProxyOperationRuntime operation) + 0x64 bytes    
System.ServiceModel.dll!System.ServiceModel.Channels.ServiceChannelProxy.Invoke(System.Runtime.Remoting.Messaging.IMessage message) + 0x6a bytes    
mscorlib.dll!System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(ref System.Runtime.Remoting.Proxies.MessageData msgData, int type) + 0xee bytes

इसका क्या कारण है और मैं इसे कैसे रोकूं? या, भी स्वागत है, मैं आगे की समस्या निवारण के बारे में कैसे जा सकता हूं?


अपने डेटाटेबल्स पर एक नज़र डालें (यदि आप डेटा ट्रांसपोर्ट करने के लिए उपयोग कर रहे हैं)।

यदि डेटाटेबल नाम खाली है, तो सीरिएलाइज़र भ्रमित हो सकता है और चीजों को गलत तरीके से क्रमबद्ध कर सकता है।

अन्यथा, यदि आप टाइप किए गए, [सीरियलज़ेबल] ऑब्जेक्ट्स का उपयोग कर रहे हैं, तो मैंने पाया है कि यदि आप डायनामिक प्रॉपर्टी घोषणाओं का उपयोग करते हैं तो कभी-कभी सीरियलाइज़र भ्रमित हो जाता है, उदाहरण के लिए:

public string MyName { get; set; }

लेकिन यह एक आसानी से दोहराने योग्य त्रुटि होगी।


ठीक है बस इस पर एक और परिदृश्य में आया। मेरे पास एक ऑपरेशन अनुबंध विधियों में से एक के लिए पैरामीटर के रूप में उपयोग किया जाने वाला एक सीरियलज़ेबल प्रकार था।

उपयोग से इस विशिष्ट विधि को टिप्पणी करने से मुझे समस्या को खोजने की अनुमति मिली। इस मामले में, पैरामीटर एक फ़ाइल से deserialized एक मॉडल था, तो मैंने बस कार्यान्वयन को बाइट [] के पैरामीटर के साथ बदल दिया और दूसरे छोर पर deserialization तर्क चलाया।

हालांकि, सभी के लिए जरूरी नहीं है, आपके ऑपरेशन अनुबंध विधियों पर पैरामीटर प्रकारों के मामले में, जो Serializable हैं, आप भी इस अपवाद में भाग सकते हैं। मैं कल्पना करता हूं कि उन्हें सही डेटाकंट्रैक्ट विशेषताओं के साथ सजाने के लिए इस समस्या को सुधारने में सहायता मिलेगी।


मेरे मामले में, कक्षाओं में से एक संपत्ति थी, जिसका डेटाटाइप ऑब्जेक्ट था। कुछ इस तरह:

public class BuyAddOnServiceRequest
{
    object site_id
}

इसे बदलने के बाद:

public class BuyAddOnServiceRequest
{
    string site_id
}

इसने काम कर दिया!


व्यक्तिगत रूप से, मुझे कक्षा पदानुक्रम (डेटाटेबल्स नहीं) के क्रमिकरण के साथ एक ही समस्या मिली।

मेरी समस्या स्वचालित संपत्ति से बिल्कुल संबंधित नहीं थी, असल में मेरे पास बहुत सारे हैं। मेरी समस्या यह थी कि मैं अपने System.Runtime.Serialization में से एक में " System.Runtime.Serialization " के संदर्भ को शामिल करना भूल गया था और मैं पदानुक्रम में ऊपरी [DataMember] विशेषताओं द्वारा संदर्भित कुछ वर्गों पर कुछ विशेषताओं [DataContract] को भी जोड़ना भूल गया था।

मेरी समस्या को ट्रैक करने के लिए मैंने अपनी रूट क्लास से शुरुआत की और कुछ [DataMember] को पदानुक्रम के नीचे हटा दिया जब तक कि यह सही समस्या को इंगित न करे। आपके पदानुक्रम के स्तर के आधार पर कुछ समय लग सकता है ...

आशा करता हूँ की ये काम करेगा! एरिक