如何防止WCF自动序列化字节数组作为base64编码的字符串?

时间:2010-10-25 14:37:50

标签: wcf serialization bytearray

调用服务时,我的客户端代码会传入数据。其中一个数据成员是字节数组,因此WCF将在序列化期间自动将其编码为base-64字符串。问题是,服务的数据契约期望是一个字节数组,而不是一个字符串,因此数据的反序列化将导致异常:期望状态'Element'。遇到名为''的'Text',命名空间''

如何解决这个故障?

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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