当前位置: 首页 > 编程语言 > C#

WCF服务参考-获取“XmlException-Namecannotstartwith'-'character,hexvalue0x3C”客户端分享

时间:2023-04-11 12:15:10 C#

WCFServiceReference-获取“XmlException:Namecannotstartwith'<'character,hex值0x3C"在客户端我有一个智能客户端应用程序通过WCF与其服务器通信。数据在客户端创建,然后通过服务发送以实现持久性。服务器和客户端通过共享dll使用相同的域类,我使用VisualStudio中方便的“添加服务引用”功能包装SvcUtil.exe,并生成客户端和代理类。尝试调用该服务时出现以下错误:发生System.Xml.XmlExceptionMessage=Name不能以“<”字符开头,十六进制值0x3C。Source=System.XmlLineNumber=0LinePosition=1StackTrace:在System.Xml.XmlConvert。VerifyNCName(Stringname,ExceptionTypeexceptionType)InnerException:这特别麻烦,因为该服务一次运行数周而没有此错误,然后突然且没有警告它会重新出现。我根本无法弄清楚是什么原因造成的。当它确实发生时,我会深入研究如何修复它,并且通常不会提出任何其他人,除非实际尝试以编程方式将事物序列化为xml并得到相同的错误。我只是使用生成的客户端和代理来尝试发送这些数据。我在我的解决方案的ServiceReferencesAwesomeService文件夹中查看了生成的代理,但看不到任何异常的东西。生成的文件中唯一出现的尖括号是:我用来调用服务的代码是这样的:这是使用上面列出的调用代码堆栈从第一帧开始:System.Xml.dll!System.Xml.XmlConvert.VerifyNCName(stringname,System.Xml.ExceptionTypeexceptionType)+0xb5字节System.Runtime.Serialization。dll!System.Runtime.Serialization。DataContract.IsValidNCName(字符串名称)+0x27字节System.Runtime.Serialization.dll!System.Runtime.Serialization.DataContract.EncodeLocalName(字符串localName)+0x1d字节System.Runtime.Serialization.dll!System.Runtime.Serialization.ClassDataContract。ClassDataContractCriticalHelper.ImportDataMembers()+0x2e1字节System.Runtime.Serialization.dll!System.Runtime.Serialization.ClassDataContract.ClassDataContractCriticalHelper.ClassDataContractCriticalHelper(System.Type类型)+0x10d字节System.Runtime.Serialization.dll!System.Runtime.SerialDataContract.DataContractCriticalHelper.CreateDataContract(我ntid,System.RuntimeTypeHandletypeHandle,System.Type类型)+0x198字节0x57字节System.Runtime.Serialization.dll!System.Runtime.Serialization.XmlObjectSerializerContext.GetDataContract(intid,System.RuntimeTypeHandletypeHandle)+0x37字节System.Runtime.Serialization.dll!System.Runtime.Serialization.XmlObjectSerializerWriteContext.InternalSerialize(System.Runtime.Serialization.XmlWriterDelegatorxmlWriter,objectobj,boolisDeclaredType,boolwriteXsiType,intdeclaredTypeID,System.RuntimeTypeHandledeclaredTypeHandle)+0x49字节【轻量级函数】System.Runtime.Serialization.dll!System.Runtime.Serialization.ClassDataContract.WriteXmlValue(System.Runtime.Serialization.XmlWriterDelegatorxmlWriter,对象obj,System.Runtime.Serialization.XmlObjectSerializerWriteContext上下文)+0x25字节declaredTypeHandle)+0x18字节System.Runtime.Serialization.dll!System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeWithoutXsiType(System.Runtime.Serialization.DataContractdataContract,System.Runtime.Serialization.XmlWriterDelegatorxmlWriter,objectobj,System.RuntimeTypeHandledeclaredTypeHandle)+0x49字节System.Runtime.Serialization.dll!System.Runtime.Serialization.DataContractSerializer.InternalWriteObjectContent(System.Runtime.Serialization.XmlWriterDelegator编写器,对象图,System.Runtime.Serialization.DataContractResolverdataContractResolver)+0xdf字节System.Runtime.Serialization。dll!System.Runtime.Serialization.DataContractSerializer.InternalWriteObject(System.Runtime.Serialization.XmlWriterDelegator编写器,对象图,System.Runtime.Serialization.DataContractResolverdataContractResolver)+0x26字节System.Runtime.Serialization.dll!System.Runtime.Serialization。XmlObjectSerializer.WriteObjectHandleExceptions(System.Runtime.Serialization.XmlWriterDelegator编写器,对象图,System.Runtime.Serialization.DataContractResolverdataContractResolver)+0x60字节System.Runtime.Serialization.dll!System.Runtime.Serialization.XmlObjectSerializer.WriteObject(System.Xml。XmlDictionaryWriter编写器,对象图)+0x2d字节System.ServiceModel.dll!System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.SerializeParameterPart(System.Xml.XmlDictionaryWriter编写器,System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.PartInfo部分,对象图)+0x38字节系统.ServiceModel.dll!System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.SerializeParameter(System.Xml.XmlDictionaryWriter编写器,System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.PartInfo部分,对象图)+0xbe字节System.ServiceModel.dll!System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.SerializeParameters(System.Xml.XmlDictionaryWriter编写器,System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.PartInfo[]部分,对象[]参数)+0x3e字节.ServiceModel.Channels.MessageVersionversion,stringaction,System.ServiceModel.Description.MessageDescriptionmessageDescription,objectreturnValue,object[]parameters,boolisRequest)+0x68字节System.ServiceModel.dll!System.ServiceModel.Dispatcher.OperationFormatter.SerializeBody内容(System.Xml.XmlDictionaryWriter编写器,System.ServiceModel.Channels.MessageVersion版本,对象[]参数,对象返回值,boolisRequest)+0x7b字节System.ServiceModel.dll!System.ServiceModel.Dispatcher.OperationFormatter.OperationFormatterMessage.OperationFormatterBodyWriter。OnWriteBodyContents(System.Xml.XmlDictionaryWriter编写器)+0x4f字节System.ServiceModel.dll!System.ServiceModel.Channels.BodyWriter.WriteBodyContents(System.Xml.XmlDictionaryWriter编写器)+0xf8字节System.ServiceModel.dll!System.ServiceModel.Channels。BodyWriterMessage.OnBodyToString(System.Xml.XmlDictionaryWriter编写器)+0x1f字节System.ServiceModel.dll!System.ServiceModel.Channels.Message.ToString(System.Xml.XmlDictionaryWriter编写器)+0xaa字节System.ServiceModel.dll!System.ServiceModel。Diagnostics.MessageLogTraceRecord.WriteTo(System.Xml.XmlWriterwriter)+0x166字节System.ServiceModel.dll!System.ServiceModel.Diagnostics.MessageLogger.LogInternal(System.ServiceModel.Diagnostics.MessageLogTraceRecord记录)+0x77字节.ServiceModel.Diagnostics.MessageLoggingSource源)+0x104字节System.ServiceModel.dll!System.ServiceModel.Diagnostics.MessageLogger.LogMessage(参考System.ServiceModel.Channels.Message消息,System.Xml.XmlReader阅读器,System.ServiceModel.Diagnostics。MessageLoggingSource源)+0x3a字节System.ServiceModel.dll!System.ServiceModel.Channels.ServiceChannel.PrepareCall(System.ServiceModel.Dispatcher.ProxyOperationRuntime操作,booloneway,refSystem.ServiceModel.Dispatcher.ProxyRpcrpc)+0x436字节System.ServiceModel.dll!System.ServiceModel.Channels.ServiceChannel.Call(stringaction,booloneway,System.ServiceModel.Dispatcher.ProxyOperationRuntimeoperation,object[]ins,object[]outs,System.TimeSpan超时)+0x12b字节)+0x64字节System.ServiceModel.dll!System.ServiceModel.Channels.ServiceChannelProxy.Invoke(System.Runtime.Remoting.Messaging.IMessage消息)+0x6a字节mscorlib.dll!System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(refSystem.Runtime.Remoting.Proxies.MessageDatamsgData,inttype)+0xeebytes是什么原因造成的,我该如何预防?或者,也欢迎,我该如何进一步解决这个问题?查看您的数据表(如果您使用它来传输数据)如果数据表名称为空,序列化程序可能会混淆并错误地序列化。否则,如果您使用类型化的[Serializable]对象,我发现如果您使用动态属性声明,有时序列化程序也会感到困惑,例如:publicstringMyName{get;放;但这将是一个容易重现的错误。就个人而言,我在类层次结构(不是DataTables)的序列化方面遇到了同样的问题。我的问题与自动属性完全无关,我实际上有很多。我的问题是我忘记在我的一个dll中包含对“System.Runtime.Serialization”的引用,我也忘记添加一些属性[DataContract]。为了找出我的问题,我从我的根类开始,从层次结构中删除了一些[DataMember],直到它指向确切的问题。根据您的层次结构级别,可能需要一些时间......希望这有帮助!Eric在我的例子中,其中一个类有一个属性,其数据类型是对象。像这样:publicclassBuyAddOnServiceRequest{objectsite_id}将其更改为:publicclassBuyAddOnServiceRequest{stringsite_id}有效!一个类似的错误把我绊倒了,但事实证明我的配置文件(实际上是silverlight的clientconfig文件)包含以下内容所以有时关于额外字符的消息应该按字面意思理解!好的,刚遇到另一种情况。我有一个可序列化类型用作我的操作合同方法之一的参数。从使用中评论这个特定的方法让我遇到了问题。在这种情况下,参数是从文件反序列化的模型,所以我只是用byte[]参数替换了实现,并在另一端运行反序列化逻辑。虽然不一定是每个人的答案,但对于参数类型可序列化的可操作契约方法,您也可能会遇到此异常。我想用正确的DataContract属性装饰它们将有助于纠正这个问题。使用[Serializable]完整属性,或使用[DataContract]和[DataMember]。以下是给我一个错误,可能是因为.Net在幕后创建了一个支持变量,其中包含一些XmlSerializer不喜欢的字符。[可序列化]publicclassMyClass{publicintMyValue{get;私有集;}...}创建完整的属性[Serializable]publicclassMyClass{int_myValue;publicintMyValue{get{return_myValue;}私有集{_myValue=value;}}...}或者使用DataContract和DataMember属性。以上是C#学习教程:WCF服务参考-获取“XmlException:名称不能以'<'字符开头,十六进制值为0x3C”。大家有用,需要多了解C#学习教程。希望大家多多关注---[DataContract]publicclassMyClass{[DataMember]publicintMyValue{get;私有集;}...}本文来自网络合集,不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:

最新推荐
猜你喜欢