【发布时间】:2011-06-17 03:59:47
【问题描述】:
我希望调用一系列 SOAP 服务(跨越一系列服务),虽然端点定义和记录良好,但没有 WSDL 数据......所以我决定构建自己的。 为此,我构建了一个测试 WCF 服务,该服务与我希望调用的服务的已知接口相匹配。
然后我保存了它公开的 WSDL,更改了 WSDL 引用的基地址,创建了我的代理(使用 wsdl.exe),将其添加到测试客户端项目中,并且可以成功创建代理并进行调用,从而导致 SOAP服务发送预期的响应...只有这个预期的响应没有被代理接收并返回给调用代码。
查看来回流量时...我可以清楚地看到服务正在回复我想要的内容。
关于如何解决此问题并让代理获取数据的任何建议?
鉴于回复实际上是相同的,我不得不回顾一下我的客户发送的内容和另一个发送的内容之间的差异。
一个已知的工作应用程序发送它的 XML blob,开头如下:
<?xml version="1.0" encoding="utf-8"?>
<s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
虽然我的客户立即从信封开始(没有 xml 标签,并且少了一个命名空间):
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
另一个区别是正文中的消息以他们的命名空间为前缀,而我的则不是……尽管两者都在标签中定义了这个命名空间。
阿拉:
<s:Body>
<u:DoSomething xmlns:u="urn:http://some.namespace.org" />
</s:Body>
对比:
<s:Body>
<DoSomething xmlns="urn:http://some.namespace.org" />
</s:Body>
【问题讨论】: