WCF 序列化从 JAX WS 到空对象的响应 - 可能的命名空间问题?

标签 wcf jax-ws

我正在使用 WCF 客户端调用 JAX Web 服务。

反序列化响应时,响应对象中的数组始终为空。但是,如果我使用消息检查器手动将命名空间添加到响应中的数组类型,则响应会正确反序列化。

所以我得到的回应是:

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Header xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" />
  <S:Body>
    <ns2:myResponse xmlns:ns2="http://mynamespace.com/">
      <myArray>
        <myObject>
          <myString>abcde</myString>
          <myInt>12345</myInt>
        </myObject>
      </myArray>
    <id>7777</id>
  </ns2:myResponse>
  </S:Body>
</S:Envelope>

这将生成一个 myResponse 类型的对象,该对象具有正确的“id”字段,但 myArray 字段的 myObject 类型的空数组。

当我手动编辑收到的消息以在 myObject 标记之前添加命名空间别名“ns2”时,它看起来像这样:
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Header xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" />
  <S:Body>
    <ns2:myResponse xmlns:ns2="http://mynamespace.com/">
      <myArray>
        <ns2:myObject>
          <myString>abcde</myString>
          <myInt>12345</myInt>
        </ns2:myObject>
      </myArray>
    <id>7777</id>
  </ns2:myResponse>
  </S:Body>
</S:Envelope>

正确的对象被反序列化,即使用大小为 1 的 myArray 包含正确的 myObject。

谁能告诉我为什么会这样以及如何让 WCF 反序列化在没有人工干预的情况下正常工作?

最佳答案

不确定这是否正是您的问题,但可能值得一试。

我们遇到了类似的问题。在我们的例子中,有一个复杂的对象被反序列化,缺少几个字段。使用调试器,我们可以看到信息在那里。但是我们无法通过代码得到它。

对我们有用的是将对象转换为包含所有字段的类型。

检查您的references.cs 文件,那里定义了哪些数据类型?

关于WCF 序列化从 JAX WS 到空对象的响应 - 可能的命名空间问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9388104/

相关文章:

java - xpath 重命名疯狂层次结构中的单个类

java - 高级客户端 JAX-WS 配置

java - jaxWS "client"需要一种方法来跟踪原始 xml 请求和响应

c# - 在 WCF 中自定义 SOAP header 命名空间前缀

.net - 将业务对象和数据传输对象合二为一。行得通吗?

c# - 如何检测 CI 构建中的 WCF 重大更改

WCF 不从群集 MSMQ 读取

wcf - SOA 和 WCF 设计问题 : Is this an unusual system design?

java - 如何将json转换为没有根元素的实体?

java - 在 jdk1.6 中使用 Endorsed 目录的确切方法是什么