发送SOAP请求时出现奇怪的XML异常

时间:2011-03-09 03:47:11

标签: asp.net oracle soap webservices-client

拥有一个使用SOAP在webservice上发布XML数据的应用程序。

数据直接从Oracle数据库中提取并解析为XML但由于某种原因,从数据库中提取的数据会导致以下无效的XML异常。

做了一些研究,看起来它可能是XML解析器不喜欢的数据中某处的NULL字符。

只是想知道是否有人以前见过这个,如果有的话他们能够在应用程序或数据库层修复它吗?

谢谢!

这是堆栈跟踪......

  

异常System.Xml.XmlException:'。',十六进制值0x00,是无效字符。第1行,位置79763。   在System.Xml.XmlTextReaderImpl.Throw(例外e)   在System.Xml.XmlTextReaderImpl.Throw(String res,String [] args)   在System.Xml.XmlTextReaderImpl.Throw(Int32 pos,String res,String [] args)   在System.Xml.XmlTextReaderImpl.ThrowInvalidChar(Int32 pos,Char invChar)   在System.Xml.XmlTextReaderImpl.ParseNumericCharRefInline(Int32 startPos,Boolean expand,BufferBuilder internalSubsetBuilder,Int32& charCount,EntityType& entityType)   在System.Xml.XmlTextReaderImpl.ParseText(Int32& startPos,Int32& endPos,Int32& outOrChars)   在System.Xml.XmlTextReaderImpl.ParseText()   在System.Xml.XmlTextReaderImpl.ParseElementContent()   在System.Xml.XmlTextReaderImpl.Read()   在System.Xml.XmlTextReader.Read()   在System.Xml.XmlValidatingReaderImpl.Read()   在System.Xml.XmlValidatingReader.Read()   在System.Xml.XmlLoader.LoadNode(Boolean skipOverWhitespace)   在System.Xml.XmlLoader.LoadDocSequence(XmlDocument parentDoc)   在System.Xml.XmlLoader.Load(XmlDocument doc,XmlReader reader,Boolean preserveWhitespace)   在System.Xml.XmlDocument.Load(XmlReader阅读器)   在Microsoft.Web.Services2.Security.MessageSignature.PreProcessElementInput(XmlElement elem)   在Microsoft.Web.Services2.Security.SignatureReference.CalculateHashValue(XmlDocument文档,CanonicalXmlNodeList refList)   在Microsoft.Web.Services2.Security.MessageSignature.BuildDigestedReferences()   at Microsoft.Web.Services2.Security.MessageSignature.ComputeKeyedHashSignature(SymmetricKeyAlgorithm key)   在Microsoft.Web.Services2.Security.MessageSignature.ComputeSignature()   在Microsoft.Web.Services2.Security.Security.SerializeXml(SoapEnvelope文档)   在Microsoft.Web.Services2.Security.SecurityOutputFilter.ProcessHeader(安全性,SoapEnvelope信封)   在Microsoft.Web.Services2.Security.SecurityOutputFilter.ProcessMessage(SoapEnvelope信封)   在Microsoft.Web.Services2.Pipeline.ProcessOutputMessage(SoapEnvelope信封)   在Microsoft.Web.Services2.OutputStream.Close()   在System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName,Object []参数)

更新:这是一个正在发布的数据选择。基本上只是纯文本,这是它在数据库列中的存在方式,包括为逗号分隔。

614494,2003,33,327,15961,59652,2,2,3,2,1,10-Dec-08,MY2003 AERO SEDAN,Manual 2.0

1 个答案:

答案 0 :(得分:0)

您从Oracle中提取了哪些数据?一个博客?图像斑点?

我问的原因是图片有标题,这意味着标题后面会有一个空字符。但是,不知道如何转义null char以使其对序列化有效,但是您可以执行类似base64对图像进行编码的操作,这将使另一端的base64转换成为反转。

除此之外,您应该发布从Oracle提取的确切数据,因为这可能有助于更具体的答案。