Web 服务调用导致 System.Xml.XmlException:'.',十六进制值 0x00
Posted
技术标签:
【中文标题】Web 服务调用导致 System.Xml.XmlException:\'.\',十六进制值 0x00【英文标题】:Web Service call results in an System.Xml.XmlException: '.', hexadecimal value 0x00Web 服务调用导致 System.Xml.XmlException:'.',十六进制值 0x00 【发布时间】:2011-05-31 09:47:32 【问题描述】:我的 Web 服务引发了以下未处理的异常 - 这与我的代码无关,它只会在多次异步调用服务器时间歇性发生。我已经包含了我返回的代码响应对象,这是唯一返回的东西(因此通用响应是一个字符串列表)。 有没有人遇到过这个问题,知道为什么 Web 服务会抛出这个问题?
整个堆栈跟踪:
System.Xml.XmlException: '.', hexadecimal value 0x00, is an invalid character. Line 4, position -88.
at System.Xml.XmlTextReaderImpl.Throw(Exception e)
at System.Xml.XmlTextReaderImpl.Throw(String res, String[] args)
at System.Xml.XmlTextReaderImpl.Throw(Int32 pos, String res, String[] args)
at System.Xml.XmlTextReaderImpl.ThrowInvalidChar(Int32 pos, Char invChar)
at System.Xml.XmlTextReaderImpl.ParseNumericCharRefInline(Int32 startPos, Boolean expand, BufferBuilder internalSubsetBuilder, Int32& charCount, EntityType& entityType)
at System.Xml.XmlTextReaderImpl.ParseText(Int32& startPos, Int32& endPos, Int32& outOrChars)
at System.Xml.XmlTextReaderImpl.ParseText()
at System.Xml.XmlTextReaderImpl.ParseElementContent()
at System.Xml.XmlTextReaderImpl.Read()
at System.Xml.XmlTextReader.Read()
at System.Xml.XmlReader.ReadElementString()
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderPartsLibraryService.Read29_GenericResponseOfListOfString(Boolean isNullable, Boolean checkType)
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderPartsLibraryService.Read34_UploadPartsResponse()
at Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer5.Deserialize(XmlSerializationReader reader)
at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
简单响应对象(伪代码):
Public Class GenericResponse(Of T)
Public Enum StateOptions
Private _result As T
Private _state As StateOptions
Private _msg As String
Public Property Result() As T
Public Property State() As StateOptions
Public Property Message() As String
End Class
我运行了 fiddler,但这是我没有看到的唯一不寻常的结果,但我认为这不会导致我遇到的问题?
<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><UploadPartsResponse xmlns="http://autovhc.co.uk/"><UploadPartsResult><Result><string>--------------------------------------------------
01/06/2011 14:38:33
Upsert Exception
Backend sent unrecognized response type: �
at Npgsql.NpgsqlState.<ProcessBackendResponses_Ver_3>d__a.MoveNext() in C:\projects\Npgsql2\src\Npgsql\NpgsqlState.cs:line 966
at Npgsql.ForwardsOnlyDataReader.GetNextResponseObject() in C:\projects\Npgsql2\src\Npgsql\NpgsqlDataReader.cs:line 1163
at Npgsql.ForwardsOnlyDataReader.GetNextRowDescription() in C:\projects\Npgsql2\src\Npgsql\NpgsqlDataReader.cs:line 1181
at Npgsql.ForwardsOnlyDataReader.NextResult() in C:\projects\Npgsql2\src\Npgsql\NpgsqlDataReader.cs:line 1367
at Npgsql.NpgsqlCommand.ExecuteNonQuery() in C:\projects\Npgsql2\src\Npgsql\NpgsqlCommand.cs:line 523
at VHC.Connections.DataAccess2.DataAccess.sqlNonQuery(NpgsqlCommand sqlCmd, Boolean closeConnection) in E:\svn_repository\vhc.server.solution\vhc.connections\Tags\v_3_0_0_5\New\ConnectionProxys\DataAccess.vb:line 119
at VHC.Connections.DataAccess2.DataAccess.sqlNonQuery(NpgsqlCommand sqlCmd) in E:\svn_repository\vhc.server.solution\vhc.connections\Tags\v_3_0_0_5\New\ConnectionProxys\DataAccess.vb:line 97
at PartsLibServerSideClasses.DAO.PLM_PsaFormat_DAO.Update(PartLibraryPartTO part, Int32 entityref, NpgsqlConnection conn) in C:\Applications\PartsImporter\Import_Library-Stable\PartsLibServerSideClasses\DAO\PSA\PLM_PsaFormat_DAO.vb:line 61
at PartsLibServerSideClasses.DAO.PLM_PsaFormat_DAO.Upsert(PartLibraryPartTO part, Int32 entityref) in C:\Applications\PartsImporter\Import_Library-Stable\PartsLibServerSideClasses\DAO\PSA\PLM_PsaFormat_DAO.vb:line 21
at PartsLibServerSideClasses.Parsing.PartsLibraryManager.SubmitPartToLibrary(PartLibraryPartWorkSegmentContainer partContainer) in C:\Applications\PartsImporter\Import_Library-Stable\PartsLibServerSideClasses\BOL\PartsLibraryManager.vb:line 70
</string></Result><State>Fail</State></UploadPartsResult></UploadPartsResponse></soap:Body></soap:Envelope>
【问题讨论】:
您有文本形式的回复吗? 我看不到任何可能导致此问题的原因...以前有人遇到过这个问题吗? 如果不是你的代码,那么可能是因为你的代码调用了什么? @John 这是一种可能,我想知道这是否与 NpgSql 或 .Net Framework 有关,但我不确定如何正确测试。 提示:它不是 .NET Framework。 【参考方案1】:我之前在错误代码中看到过这种情况,当用户从另一个应用程序将值复制/粘贴到数据库字段中时,该错误代码没有编码或删除 0,然后将这些记录一直输出到 xml 解析器。
【讨论】:
源数据来自一个文件。为了将这些文件放入数据库,我们将文件的每一行解析为一个对象,然后将这些对象的集合发送到 Web 服务,然后将其插入到数据库中。因此没有任何复制/粘贴,并且返回的数据已经通过序列化过程。 我并不是说你的 NULL 已经以同样的方式插入,只是你应该仔细检查数据库中的数据,看看它是首先存储的位置还是文件数据来自。当一个 unicode 字符在没有正确编码的情况下按字面意思插入非 unicode 数据时,也会发生这种情况。 (unicode的两个字节之一通常为0) 我检查过,但看不到任何导致此问题的原因。为这个想法 +1。以上是关于Web 服务调用导致 System.Xml.XmlException:'.',十六进制值 0x00的主要内容,如果未能解决你的问题,请参考以下文章
尝试发布数据时,使用 Jquery 调用 .Net Web 服务会导致问题
从 ASP.net 4 Web API 2 项目通过 HttpClient 调用 REST 服务导致异常