【问题标题】:How do I prevent WCF from auto-serializing byte-array as base-64 encoded string?如何防止 WCF 将字节数组自动序列化为 base-64 编码字符串?
【发布时间】:2011-10-17 21:50:47
【问题描述】:

调用服务时,我的客户端代码会传入数据。其中一个数据成员是字节数组,因此 WCF 会在序列化过程中自动将其编码为 base-64 字符串。问题是,服务的数据契约需要一个字节数组,而不是字符串,所以数据的反序列化会导致异常:Expecting state 'Element'.. Encountered 'Text' with name '',命名空间''

如何解决此故障?

【问题讨论】:

  • 我也有同样的问题。我有一个定义 s 字节数组的 WSDL 文件。此字节数组应使用数组中每个字节的新元素进行序列化,但 WCF 将数组序列化为 base-64 字符串。

标签: wcf serialization bytearray


【解决方案1】:

我不确定我明白你的意思吗?您的服务合同是什么样的?我非常怀疑问题在于 base-64 序列化,除非您的服务期望以十六进制格式编码的二进制数据。

请记住,您在这里使用的是 XML,因此二进制数据不能在未编码的情况下传输;它需要被序列化为可以嵌入到 SOAP 信封中的文本格式(除非您使用的是 MTOM),并且通常是 Base-64。

【讨论】:

    【解决方案2】:

    这可能是由于客户端和服务不匹配造成的。您是否尝试过刷新客户端代理(例如通过更新服务引用)?

    【讨论】:

      【解决方案3】:

      我的解决方案是手动将自动生成的数据合约从 byte[] 更改为 int[]。 XML 现在通过了验证,因为 int 数组的每个元素都放在一个单独的元素中。

      如果再次从 WSDL 重新生成文件,缺点是必须手动更改数据协定。

      【讨论】:

        猜你喜欢
        • 2013-09-26
        • 2015-08-09
        • 1970-01-01
        • 2021-05-25
        • 1970-01-01
        • 1970-01-01
        • 2012-04-10
        • 2023-03-26
        • 2023-01-31
        相关资源
        最近更新 更多