Web 服务生成错误 xml: 十六进制值 0x00 是无效字符错误

Web service generates bad xml: Hexadecimal value 0x00 is a invalid character error

VS 2019 VB.NET 和 c#

我有一个 Web 服务调用另一个 Web 服务。提供者 Web 服务 return 是一个对象数组。消费者 Web 服务尝试将调用结果分配给变量并抛出错误:

Hexadecimal value 0x00 is a invalid character, line 1, position nnnnn

请注意,我不会将结果与 xml 相互转换,'system' 正在这样做。

我检查了数据,虽然复杂但没问题。我通过反复试验发现,如果我删除了一个恰好设置为 Nothing 的字段,它就可以工作(有数百个字段,许多字段什么都没有)。我看不出我删除的字段有什么特别之处。所以听起来有问题。

我认为这可能是一个 unicode 问题,所以我向提供程序 Web 服务添加了一个全球化条目 web.config:

<globalization requestEncoding="utf-8" responseEncoding="utf-8"/>

没有效果。

所以我有一个对象数组(我将其简化为 1 的计数,仍然出现错误),我正在尝试 return 和提供程序 Web 中的 return 语句之间的某处服务以及将结果分配给消费者 Web 服务中的变量我变得很糟糕 xml。

我想我可以自己将它转换为 xml,确保它是有效的,然后提供它,但它似乎应该按原样工作。

关于如何追踪这个的任何想法?

附录

应该更清楚一点。我从 Web 方法 returning 了一组用户定义的对象,因此数据被序列化为 XML SOAP 响应。如果我使用邮递员查看响应,那么 soap xml 响应是有效的,但是当远程服务调用 Web 方法时,我会看到此错误。所以首先我不确定错误是在哪里引入的......它看起来不像是网络方法有问题,邮递员可以调用它并获得有效xml。但是我的另一个程序,恰好也是一个 Web 服务,可能会从请求中变坏 xml。

0x0 是 NUL 字符,在 XML.

中是不允许的

您无法通过更改字符编码来解决此问题。

您的选择:

  1. 修复正在发送 not-well-formed XML 的提供商 Web 服务。 (这是非常受欢迎的。)
  2. 尝试修复损坏的响应,然后再将其处理为 XML。 (你可能有更多的控制权来改变你的结局,但从长远来看 运行,推动服务提供商修复他们损坏的服务对各方都是最好的。)

另请参阅:

  • Is there any difference between 'valid xml' and 'well formed xml'?