为啥我的 .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 节点,以上是关于为啥我的 .NET Web 服务 XML 与其他人的不同?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 Tomcat 部署的 web.xml 没有被主机服务器读取?
为啥 XML 仍然用于 Web 服务响应,即使 JSON 更好? [关闭]
为啥来自 xml Web 服务的字符串在 Android TextView 中不显示新行?