半自定义WCF代理返回零,尽管有有效数据返回
本文关键字:返回 有效 数据 有效数 自定义 WCF 代理 | 更新日期: 2023-09-27 17:59:16
我希望调用一系列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/">
另一个区别是,正文中的消息以他们的命名空间为前缀,而我的消息则不是。。。尽管两者都在标签中定义了这个名称空间。
Ala:
<s:Body>
<u:DoSomething xmlns:u="urn:http://some.namespace.org" />
</s:Body>
VS:
<s:Body>
<DoSomething xmlns="urn:http://some.namespace.org" />
</s:Body>
这不是一个命名空间:
s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
它是为信封设置编码样式,即使SOAP规范中没有要求,也可能是您所讨论的特定实现所要求的。您对从客户端发送的内容有足够的控制权吗?
除此之外,XML PI不是必需的,我认为您在研究主体XML时肯定是正确的。这种情况几乎总是在某个地方出现某种名称空间不匹配的情况。您是否100%肯定命名空间URI是否相同?
最有可能的问题是VS版本使用了"默认"XML命名空间。我使用过的一些soap解析器在使用未别名(默认)命名空间时无法正常工作。如果您知道使用u:alias可以与服务一起使用,那么即使s:Body元素中的每个标记都以别名为前缀,您的代理也应该生成它。