gpt4 book ai didi

c# - 尝试使用来自第三方 WSDL 的错误元素在 VS2013 中创建服务引用时出错

转载 作者:行者123 更新时间:2023-11-30 22:04:38 26 4
gpt4 key购买 nike

我在 VS 2013 中使用提供的第三方 WSDL 为 Web 服务创建 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 无错误地运行),我必须注释掉端口和绑定(bind)中的故障定义。我可以接受这一点(因为我制作了一个 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给出绑定(bind)错误:

Style: Unknown [Warn!]
Could not detect the 'use' for the operations of binding ViewMessagesPortSoap11

我还是一无所知。

最佳答案

您在上面发布的 WSDL 存在一个问题,即没有 targetNamespace 为“http://www.example.com/data/common/”的架构,这正是 sch0:BusinessErrorFault 元素所期望的。我认为这可能是因为您没有提供完整的 WSDL,所以我将模式的 targetNamespace 更改为它。如果这个操作的下一个错误:

<wsdl:operation name="BusinessError">
<wsdl:fault name="BusinessErrorFault" message="sch0:BusinessErrorFault" />
</wsdl:operation>

没有输入或输出,只有错误,从那以后就没有了。

我猜这也可能是因为您简化了 WSDL,所以如果您遇到更多错误,请发布完整的 WSDL。

关于c# - 尝试使用来自第三方 WSDL 的错误元素在 VS2013 中创建服务引用时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25066259/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com