为啥我的 .NET Web 服务 XML 与其他人的不同?

Posted

技术标签:

【中文标题】为啥我的 .NET Web 服务 XML 与其他人的不同?【英文标题】:Why is my .NET web service XML different to somebody else's?为什么我的 .NET Web 服务 XML 与其他人的不同? 【发布时间】:2012-02-13 23:51:28 【问题描述】:

我是 .NET Web 服务的新手,对这个问题非常困惑。 TCP Viewer 显示我的测试应用程序与我的 Web 服务对话形成了它的 XML,如下所示:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <GetSupply xmlns="http://webservices.florecom.org/commercial/customer/">
      <Request>
        <SupplyRequest>
          <Header xmlns="urn:fec:florecom:xml:data:draft:SupplyStandardMessage:5">
            <UserName>xxx</UserName>
            <Password>xxx</Password>
            <MessageDateTime>2012-01-17T14:59:44.0438037+02:00</MessageDateTime>
            <MessageSerial>0</MessageSerial>
          </Header>
          <Body xmlns="urn:fec:florecom:xml:data:draft:SupplyStandardMessage:5">
            <SupplyRequestDetails>
              <SupplyRequestLine xmlns="urn:fec:florecom:xml:data:draft:ReusableAggregateBusinessInformationEntity:3"/>
            </SupplyRequestDetails>
          </Body>
        </SupplyRequest>
      </Request>
    </GetSupply>
  </s:Body>
</s:Envelope>

但我的 Web 服务正在从另一家公司接收 XML,如下所示:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <soap:Body>
    <fsm:SupplyRequest xmlns:qdt="urn:un:unece:uncefact:data:draft:QualifiedDataType:5" xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:4" xmlns:ram="urn:un:unece:uncefact:data:draft:ReusableAggregateBusinessInformationEntity:3" xmlns:fsm="urn:fec:florecom:xml:data:draft:SupplyStandardMessage:5">
      <fsm:Header>
        <fsm:UserName>xxx</fsm:UserName>
        <fsm:Password>xxx</fsm:Password>
        <fsm:MessageID>634617184436505019</fsm:MessageID>
        <fsm:MessageDateTime>2012-01-09T15:07:23.6505019+01:00</fsm:MessageDateTime>
        <fsm:MessageSerial>0</fsm:MessageSerial>
      </fsm:Header>
      <fsm:Body>
        <fsm:SupplyRequestDetails>
          <SupplyRequestLine xmlns="urn:fec:florecom:xml:data:draft:ReusableAggregateBusinessInformationEntity:3"/>
        </fsm:SupplyRequestDetails>
      </fsm:Body>
    </fsm:SupplyRequest>
  </soap:Body>
</soap:Envelope>

谁能帮忙解释一下原因?这些是不同版本的 SOAP 吗?谢谢

更新

有趣的是,在这种情况下(使用第二条 XML 消息)发生的问题是,当服务方法被命中时(使用断点检查这一点并使用 Fiddler 欺骗消息).NET 无法绑定方法的参数(称为'Request'),使其值保持为NULL

【问题讨论】:

它们在我看来是一样的,如果它们不一样,你会得到错误 @Jontatas:不幸的是,我遇到了错误(请参阅上面的更新)并且消息(在我的 n00b 眼中)完全不同? 我想说您在我们的集成平台中使用来自 Web 服务的数据时偶然发现了同样的事情。有趣的是,如果我返回一个对象,它可以工作,但对于数组数据,这是不行的。见***.com/questions/8485744 这是在服务器之间传递字符串的最复杂的方式。您可以考虑改用 REST,并消除所有命名空间、标题、正文和信封垃圾以及您遇到的问题。 【参考方案1】:

如果您指的是肥皂与 s,它实际上并不重要。这些节点是命名空间,以便消费者知道文档的格式。它们实际上将由知道http://schemas.xmlsoap.org/soap/envelope定义的架构的人进行相同的处理

两者都引用soap 1.1命名空间

【讨论】:

不幸的是,这并不能解释为什么虽然它命中了服务方法,但提供的参数在第二条消息中仍然为 Null,但在第一条消息中有效。 在名为GetSupply 的服务方法中,参数名为Request - 它绑定在第一条消息中,而不是第二条消息中 您的第二个消息缺少 2 个 XML 节点, 这意味着您的 Web 服务的第二个请求构造不正确。您可以通过两种可能的方式来处理这个问题,1. 让调用者修复他们发出的请求,以将这两个包装节点包含在他们的请求中,或者 2. 更改您的 Web 服务,使其不再需要这两个节点(这可能有点繁琐)。

以上是关于为啥我的 .NET Web 服务 XML 与其他人的不同?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 Tomcat 部署的 web.xml 没有被主机服务器读取?

为啥 XML 仍然用于 Web 服务响应,即使 JSON 更好? [关闭]

为啥来自 xml Web 服务的字符串在 Android TextView 中不显示新行?

asmx Web 服务在 .net 4.0 中返回 xml 而不是 json

用 Erlang 与其他人制作的套接字服务器

.NET XML Web 服务,消费类无法访问 Web 服务类