2010-02-19 247 views
8

我对WSDL很新,但我想要做的很简单。我已经得到了一个使用python的ZSI库的web服务,但是我坚持定义一个返回一个自定义类型数组的服务。如何在WSDL中定义自定义类型的数组?

在我的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的Web服务和C#的客户端。客户端Web服务代码由wsdl.exe生成

有什么建议吗?

回答

21
<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>