Как определить массив пользовательских типов в WSDL? - PullRequest
8 голосов
/ 19 февраля 2010

Я очень плохо знаком с WSDL, но то, что я пытаюсь сделать, очень просто.Я получил веб-сервис, работающий с библиотекой ZSI в Python, но застрял, определяя сервис, который возвращает массив пользовательского типа.

В моем 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 Ответ

21 голосов
/ 19 февраля 2010
<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>
...