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



VS 2019 VB.NET和c#

我有一个调用另一个web服务的web服务。提供者web服务返回一个对象数组。使用者web服务试图将调用结果分配给一个变量,并抛出一个错误:

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

请注意,我不将结果转换为xml或从xml转换,"系统"正在执行此操作。

我检查了数据,虽然很复杂,但还好。我通过反复试验发现,如果我删除一个恰好设置为Nothing的字段,它就会起作用(有数百个字段,许多字段都是Nothing(。我看不出我去掉的这块地有什么特别之处。所以这听起来很糟糕。

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

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

但没有效果。

因此,我有一个试图返回的对象数组(我将其简化为计数1,仍然得到错误(,介于提供者web服务中的return语句和将结果分配给消费者web服务中变量之间,我得到了糟糕的xml。

我想我可以自己把它转换成xml,确保它是有效的,并提供服务,但它似乎应该按原样工作。

有什么关于我该怎么追踪的想法吗?

附录

应该把这件事说得更清楚一点。我从web方法返回一个用户定义的对象数组,因此数据被序列化为XMLSOAP响应。如果我使用poster查看响应,那么soap-xml响应是有效的,但是当远程服务调用web方法时,我会看到这个错误。因此,首先我不确定错误是从哪里引入的。。。看起来web方法没有故障,poster可以调用它并获取有效的xml。但我的另一个程序,恰好也是一个web服务,可能从请求中得到了糟糕的xml。

0x0是NUL字符,在XML中是不允许的。

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

您的选择:

  1. 修复发送格式不正确的XML的提供程序web服务。(这是非常可取的。(
  2. 在将损坏的响应处理为XML之前,请尝试修复该响应。(你可能有更多的控制权来改变你的目的,但从长远来看,让服务提供商修复他们的坏服务对各方来说都是最好的。(

另请参阅:

  • XML验证错误:字符0x0超出允许的范围
  • 如何解析无效(错误/格式不正确(的XML
  • 在';有效的xml';和';格式良好的xml'

最新更新