半自定义WCF代理返回零,尽管有线数据有效返回

时间:2011-06-16 19:48:14

标签: c# wcf wsdl

我希望调用一系列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>

VS:

<s:Body>
    <DoSomething xmlns="urn:http://some.namespace.org" />
</s:Body>

2 个答案:

答案 0 :(得分:0)

这不是命名空间:

s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"

它正在设置信封的编码样式,即使它不是必需的per the SOAP spec可能是您正在与之交谈的具体实现所必需的。你是否对你从客户端发送的内容有足够的控制权来获得它?

除此之外,XML PI不是必需的,我认为你肯定在正确的轨道上查看正文XML。这几乎总是某种命名空间不匹配的情况。您是否100%肯定名称空间URI 相同

答案 1 :(得分:0)

最可能的问题是使用“默认”XML命名空间的VS版本。我使用的肥皂解析器在使用无别名(默认)命名空间时无法正常工作。如果您知道使用u:alias与服务一起使用,即使s:Body元素中的每个标记都带有别名前缀,您的代理也应该生成它。