2012-12-14 160 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