2012-12-14 159 views
1

我使用Web服務時,我有這個從WSDL的陣列創建SOAP請求複雜類型

<!--Complex Type for PersonAddress--> 
<xs:complexType name="PersonAddress"> 
    <xs:sequence> 
     <xs:element name="Address" type="Address" minOccurs="0" maxOccurs="1"/> 
    </xs:sequence> 
</xs:complexType> 

<!--Complex Type for Address--> 
<xs:complexType name="Address"> 
    <xs:sequence> 
     <xs:element name="Addr1" type="xs:string" minOccurs="0" maxOccurs="1"/> 
     <xs:element name="Addr2" type="xs:string" minOccurs="0" maxOccurs="1"/> 
     <xs:element name="City" type="xs:string" minOccurs="0" maxOccurs="1"/> 
     <xs:element name="State" type="xs:string" minOccurs="0" maxOccurs="1"/> 
     <xs:element name="Zip" type="xs:string" minOccurs="0" maxOccurs="1"/> 
    </xs:sequence> 
</xs:complexType> 

使用生成的代理,我創建PersonAddress的Collection並將Address對象添加到它。

... 
var convertedAddresses = new PersonAddress[addressesToCounvert.Count]; 
for (int i = 0; i < addresses.Count; i++) 
{ 
    convertedAddresses[i] = ConvertAddress(addresses[i]); 
} 
person.PersonAddresses = convertedAddresses; 
... 

當我提交請求時,它看起來像這樣

<PersonAddress> 
    <Address> 
     ... 
    </Address> 
</PersonAddress> 
<PersonAddress> 
    <Address> 
     ... 
    </Address> 
</PersonAddress> 

所以我在做什麼wrong..the需要的格式將

<PersonAddress> 
    <Address> 
     ... 
    </Address> 
    <Address> 
     ... 
    </Address> 
</PersonAddress> 

感謝任何輸入

+0

您可以更改'maxOccurs =架構中的PersonAddress/Address是否爲= maxOccurs =「unbounded」=「1」 – RichardTowers

+0

謝謝!這似乎是問題。 – Chris

回答

1

據我所知,你得到的輸出符合WSDL/XSD定義。基於WSDL,<Person>元素可以包含多個<PersonAddress>元素。根據XSD,<PersonAddress>元素可以包含0或1個<Address>元素。使用所提供的信息的有效contstructions是:

<Person> 
<PersonAddress> 
    <Address> 
    ... 
    </Address> 
</PersonAddress> 
</Person> 
<Person> 
<PersonAddress> 
    <Address> 
     ... 
    </Address> 
</PersonAddress> 
<PersonAddress> 
    <Address> 
     ... 
    </Address> 
<PersonAddress> 
</Person> 

也請注意,在<PersonAddress>拼寫不一致。在你提供的WSDL代碼中定義了一個<Person>元素,其中包含0到多個<PersonAddresses>元素(注意「地址」的複數形式)。爲了這個答案的目的,我認爲這只是一個錯字,並且<PersonAddresses>實際上應該在WSDL中拼寫爲<PersonAddress>。我想確保指出這一點,以防止問題僅僅是您使用了錯誤的對象(即可能有一個<PersonAddresses>複雜類型,允許其中包含1到多個<Address>元素)

+0

謝謝!更改爲允許1到多個似乎是問題。如果需要更改請求格式,我需要讓服務的提供者對其進行更改。 – Chris

+0

我不認爲我同意這種做法。爲什麼服務提供商需要改變一些東西?什麼樣的數據需求不滿足於當前的WSDL/XSD? – pmartin