【发布时间】:2009-12-05 17:12:44
【问题描述】:
我已经从 WSDL 文件生成了 WCF 代理,但是现在当我调用代理方法时,它们返回 null。我启用了消息记录,并且可以看到来自服务器的消息已正确返回。
我已经检查了this 问题的答案,但在我的情况下,至少返回对象的名称在消息和 WSDL 中是相同的。我仍然认为问题与 WSDL 文件有关,因为它不是通过“?wsdl” URL(它是第 3 方网络服务)以通常的方式获取的,而是单独给出的。
方法的返回类型只是一个字符串。
有没有其他人遇到过类似的问题,如果有的话,相应的解决方案是什么?问题的最可能根源是什么?
重新编辑:
它是一个 RPC/Encoded Web 服务。正如所写,我可以通过消息记录看到 SOAP 响应,但 WCF 似乎无法解析信息。
服务响应的消息部分如下所示:
<ns1:ServiceResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="the target namespace">
<ns1:ReturnValue xsi:type="xsd:string">
但是,当检查来自我的客户的传出消息时,情况有所不同:
<ns1:ServiceRequest soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="the target namespace">
<RequestValue xsi:type="xsd:string" xmlns="">
所以也许代理期望响应具有相同的命名空间结构,因此无法解析它。
我尝试将 wsdl 消息定义中的 type 属性更改为 element,并在 wsdl 定义的 types 部分添加了一些新元素,但随后 svcutil 在生成代理时阻塞,抱怨推断的样式文档和指定的样式 rpc 之间存在冲突。
来自WSDL specification,第 3.5 节:
如果使用是encoded,则每个消息部分都使用type属性引用一个抽象类型。
但是我有点困惑,因为在这个question 中似乎没有问题。在限制为 RPC/编码服务的情况下进行类似更改需要什么?
【问题讨论】:
-
您是如何生成 WSDL 的?您是使用 svcutil 命令还是在 VSS 中添加服务?而且,您知道响应的格式(文本、MTOM?)以及它是什么类型的网络服务?
-
正确:您是如何从 WSDL 生成类的?