我正在使用提供的第三方WSDL为Web服务在VS 2013中创建一个WCF客户端 - 很可能是在Java上运行。
在原始WSDL上运行svcutil会给出类似于此的错误:
Error: Cannot import wsdl:binding
Detail: There was an error importing a wsdl:portType that the wsdl:binding is dependent on.
XPath to wsdl:portType:
//wsdl:definitions[@targetNamespace='<ns>']/wsdl:portType[@name='xxxPort']
XPath to Error Source:
//wsdl:definitions[@targetNamespace='<ns>']/wsdl:binding[@name='xxxPortSoap11']
Error: Cannot import wsdl:port
Detail: There was an error importing a wsdl:binding that the wsdl:port is dependent on.
XPath to wsdl:binding:
//wsdl:definitions[@targetNamespace='<ns>']/wsdl:binding[@name='xxxPortSoap11']
XPath to Error Source:
//wsdl:definitions[@targetNamespace='<ns>']/wsdl:service[@name='xxxPortService']/wsdl:port[@name='xxxPortSoap11']
Generating files...
Warning: No code was generated. ...
为了使服务引用工作(或svcutil正常运行),我必须注释掉端口和绑定中的错误定义。我可以忍受(因为我已经使MessageInspector
从各种细节元素中提取错误),但希望让它正常工作。
简化WSDL只显示给我带来问题的元素:
<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions
xmlns:tns="http://www.example.com/data/common/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:sch0="http://www.example.com/data/common/"
targetNamespace="http://www.example.com/data/common/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<wsdl:types>
<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:tns1="http://www.example.com/data/common/"
attributeFormDefault="unqualified" elementFormDefault="qualified"
targetNamespace="www.example.com/data/common/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:complexType xmlns="http://www.w3.org/2001/XMLSchema" name="BusinessErrorType">
<xsd:sequence xmlns="http://www.w3.org/2001/XMLSchema">
<xsd:element xmlns="http://www.w3.org/2001/XMLSchema"
name="Error" maxOccurs="unbounded" type="string" />
</xsd:sequence>
</xsd:complexType>
<xsd:element xmlns="http://www.w3.org/2001/XMLSchema"
name="BusinessErrorFault" type="tns1:BusinessErrorType" />
</xsd:schema>
</wsdl:types>
<wsdl:message name="BusinessErrorFault">
<wsdl:part name="BusinessErrorFault" element="sch0:BusinessErrorFault" />
</wsdl:message>
<wsdl:portType name="ViewMessagesPort">
<wsdl:operation name="BusinessError">
<wsdl:fault name="BusinessErrorFault" message="sch0:BusinessErrorFault" />
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="ViewMessagesPortSoap11" type="sch0:ViewMessagesPort">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="BusinessError">
<soap:operation soapAction="" />
<wsdl:fault name="BusinessErrorFault">
<soap:fault use="literal" name="BusinessErrorFault" />
</wsdl:fault>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="ViewMessagesPortService">
<wsdl:port name="ViewMessagesPortSoap11" binding="sch0:ViewMessagesPortSoap11">
<soap:address location="https://www.example.com/ws/" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
我在网上看了很多SO问题和其他地方,包括Scott Hanselman's breaking the rules没有任何欢乐。
希望这是显而易见的事情......当我回到英国的路上时,我感激地等待着整个池塘的任何答案。
更新
通过https://www.wsdl-analyzer.com/传递上述WSDL会导致绑定错误:
Style: Unknown [Warn!]
Could not detect the 'use' for the operations of binding ViewMessagesPortSoap11
我仍然不是更聪明的人。
答案 0 :(得分:3)
您在上面发布的WSDL存在一个问题,即没有架构的targetNamespace为&#34; http://www.example.com/data/common/&#34;这是sch0:BusinessErrorFault元素所期望的。我假设这可能是因为您没有提供完整的WSDL,所以我将架构的targetNamespace更改为它。如果这个操作出现下一个错误:
<wsdl:operation name="BusinessError">
<wsdl:fault name="BusinessErrorFault" message="sch0:BusinessErrorFault" />
</wsdl:operation>
没有输入或输出,只有错误,这是自那以后没有。
我想这也可能是因为你简化了WSDL所以如果你得到更多的错误,请发布完整的WSDL。