【问题标题】:Attribute ??? must have present attributes name or ref, but not both"属性 ???必须具有当前属性名称或引用,但不能同时具有“
【发布时间】:2012-09-27 14:55:55
【问题描述】:

我正在尝试使用带有 Visual Studio 2010 客户端的 SOAP 标准使用 PHP 创建的 Web 服务。

当我尝试生成代理时,会出现关于 WSDL 文件格式的错误。错误信息是这样的(翻译的很不准确):

名为“Inscritos”的 ComplexType 架构元素出错, 属性 ???必须具有当前属性 name 或 ref,但不能同时具有两者

查看 WSDL 我发现了这个元素:

 <xsd:complexType name="Inscritos">
   <xsd:complexContent>
     <xsd:restriction base="SOAP-ENC:Array">
       <xsd:attribute res="http://schemas.xmlsoap.org/soap/encoding/:arrayType" wsdl:arrayType="tns:Inscritos2[]"/>
     </xsd:restriction>
   </xsd:complexContent>
 </xsd:complexType>

WS 由外部提供商托管,因此我们没有机会重新定义它。有人知道避免此问题的方法或解决方法吗?

提前感谢您的帮助

【问题讨论】:

    标签: xml wsdl


    【解决方案1】:

    我很确定xsd:attribute 标签应该有属性ref 而不是res。尝试改变

    <xsd:attribute res="http://schemas.xmlsoap.org/soap/encoding/:arrayType" wsdl:arrayType="tns:Inscritos2[]"/>
    

    <xsd:attribute ref="http://schemas.xmlsoap.org/soap/encoding/:arrayType" wsdl:arrayType="tns:Inscritos2[]"/>
                     ^
    

    【讨论】:

    • 感谢 Erik,但是当我进行此更改时,此 WSDL 行中出现另一个错误:文档 XML (126,20) 命名空间前缀“schemas.xmlsoap.org/soap/encoding”未定义
    【解决方案2】:

    这是一个糟糕的架构,我不知道它应该是什么意思,所以我不能建议更正。

    如果您的项目依赖于不符合目的的外部供应商提供的服务,您会问该怎么办。这是一个项目管理问题,而不是技术问题。

    【讨论】:

    • 我认为有一种技术方法可以实现此解决方法,但我没有创建它,所以这就是我来这里寻求帮助的动机。也许一种方法可以是下载 WSDL,并进行修改以使其与 VS2010 客户端代理生成器兼容。然后使用 wsdl.exe 命令行生成客户端代理。问题是我不知道我必须在这个元素中修改什么才能使其正常工作
    猜你喜欢
    • 2021-05-08
    • 2014-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    相关资源
    最近更新 更多