none
C# 调用WebService 中文编码问题 RRS feed

  • 问题

  • 调用一个WebService时,抛出异常。

    格式化程序尝试对消息反序列化时引发异常: 尝试对参数XXX进行反序列化时出错:XXX命名空间中的XXX并非所需元素。所需元素应为"id"。

    通过抓包分析得出这个Web调用是正常的,也获得了需要的结果,但是在C#中报这个错误。我怀疑是Web Service相应中含有Unicode编码所致。某参数返回值如下<returnDesc>&#x83B7;&#x53D6;&#x5E10;&#x6237;&#x8D44;&#x91D1;&#x6210;&#x529F;</returnDesc>。

    请问这个问题该如何处理?谢谢。

    2012年3月6日 9:39

答案

  • 自己回复一下吧, ws端是java编写的, soap消息的命名空间存在问题, 无法直接反序列化, 需要自己解析soap消息...

    你必须非常努力,才能看起来毫不费力

    2012年6月15日 7:26

全部回复

  • dear

    您是要对WS的Method进行反序列化?还是?

    若资料结构错误是无法反序列化,建议先弄成本机专案,测试能够正常的反序列化后在弄成WS专案,WS应该跟编码无关


    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/


    2012年3月6日 11:20
  • 谢谢您的回复。

    调用的是别人提供的WS。输出WS中方法调用的结果时报了以上的异常,反序列化出错。

    2012年3月6日 13:16
  • dear

    那就得回报对方,看是您反序列化没写好,还是他那边的资料结构有问题


    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/

    2012年3月7日 3:16
  • 谢谢回复。

    google了很久,发现可能原因是java服务端命名空间的问题。可是这个ws是电信部门提供的,让他们改不大可能。用Webservice Studio调试也是没有取到值,soap响应是正常的。这样的问题有什么解决方法没?如果手动生成soap消息有没有好的解决方案?

    2012年3月7日 9:01
  • 自己回复一下吧, ws端是java编写的, soap消息的命名空间存在问题, 无法直接反序列化, 需要自己解析soap消息...

    你必须非常努力,才能看起来毫不费力

    2012年6月15日 7:26