如何在WSDL中定义自定义类型的数组?

8 投票
1 回答
24572 浏览
提问于 2025-04-15 19:28

我对WSDL还很陌生,但我想做的事情其实很简单。我已经用Python的ZSI库成功搭建了一个网络服务,但在定义一个返回自定义类型数组的服务时遇到了困难。

在我的WSDL文件中,我有以下内容:

<xsd:element name="ArtPiece">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="title" type="xsd:string" />
        <xsd:element name="year" type="xsd:string" />
        <xsd:element name="imageId" type="xsd:int"  minOccurs="0" />
        <xsd:element name="image" type="xsd:base64Binary"  minOccurs="0" />
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

如果我尝试添加另一个元素,比如ArtPieceArray,表示可以有无限数量的ArtPiece类型,这似乎是不合法的。

而当我在定义消息时,尝试使用ArtPiece[],这也似乎是不合法的。

我在使用ZSI来搭建网络服务,而客户端是用C#编写的。客户端的网络服务代码是通过wsdl.exe生成的。

有没有什么建议呢?

1 个回答

26
<xs:schema elementFormDefault="qualified" 
           targetNamespace="http://schemas.datacontract.org/2004/07/Foo" 
           xmlns:xs="http://www.w3.org/2001/XMLSchema" 
           xmlns:tns="http://schemas.datacontract.org/2004/07/Foo">
    <xs:complexType name="ArtPiece">
        <xs:sequence>
            <xs:element minOccurs="0" name="image" nillable="true" type="xs:base64Binary"/>
            <xs:element minOccurs="0" name="imageId" type="xs:int"/>
            <xs:element minOccurs="0" name="title" nillable="true" type="xs:string"/>
            <xs:element minOccurs="0" name="year" nillable="true" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>

    <xs:element name="ArtPiece" nillable="true" type="tns:ArtPiece"/>

    <xs:complexType name="ArrayOfArtPiece">
        <xs:sequence>
            <xs:element minOccurs="0" maxOccurs="unbounded" name="ArtPiece" nillable="true" type="tns:ArtPiece"/>
        </xs:sequence>
    </xs:complexType>

    <xs:element name="ArrayOfArtPiece" nillable="true" type="tns:ArrayOfArtPiece"/>
</xs:schema>

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

撰写回答