C# 使用复杂类型数组创建soap请求

C# 使用复杂类型数组创建soap请求,c#,soap,C#,Soap,我正在使用一个web服务,我从wsdl中得到了以下信息: <xs:complexType name="Person"> <xs:sequence> <xs:element minOccurs="0" maxOccurs="unbounded" name="PersonAddresses" type="ns:PersonAddress" /> </xs:sequence> </xs:complex

我正在使用一个web服务,我从wsdl中得到了以下信息:

<xs:complexType name="Person">
    <xs:sequence>          
      <xs:element minOccurs="0" maxOccurs="unbounded" name="PersonAddresses" type="ns:PersonAddress" />
    </xs:sequence>
</xs:complexType>

从xsd:

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

使用生成的代理,我创建了一个PersonalAddress集合,并向其中添加了Address对象

...
var convertedAddresses = new PersonAddress[addressesToCounvert.Count];
for (int i = 0; i < addresses.Count; i++)
{
    convertedAddresses[i] = ConvertAddress(addresses[i]);
}
person.PersonAddresses = convertedAddresses;
...
。。。
var convertedaddress=newpersonaddress[addressestoconvert.Count];
for(int i=0;i
当我提交请求时,看起来是这样的

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

...
...
那么我做错了什么..需要的格式是

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

...
...

感谢您的任何输入

据我所知,您得到的输出与WSDL/XSD定义相匹配。基于WSDL,一个
元素可以包含多个
元素。基于XSD,
元素可以包含0或1个
元素。使用所提供信息的有效说明如下:

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

...
...
...

还请注意,
的拼写不一致。在您提供的WSDL代码中,
元素被定义为包含0到多个
元素(请注意“地址”的复数形式)。为了回答这个问题,我假设这只是一个打字错误,
在WSDL中应该被拼写为
。我想确保指出这一点,以防问题仅仅是您使用了错误的对象(即,可能有一个
复杂类型,其中允许1到多个
元素)

据我所知,您得到的输出与WSDL/XSD定义相匹配。基于WSDL,一个
元素可以包含多个
元素。基于XSD,
元素可以包含0或1个
元素。使用所提供信息的有效说明如下:

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

...
...
...

还请注意,
的拼写不一致。在您提供的WSDL代码中,
元素被定义为包含0到多个
元素(请注意“地址”的复数形式)。为了回答这个问题,我假设这只是一个打字错误,
在WSDL中应该被拼写为
。我想确保指出这一点,以防问题仅仅是您使用了错误的对象(即,可能有一个复杂的类型,它允许1到多个
元素)

您可以将
maxOccurs=“1”
更改为
maxOccurs=“unbounded”
用于模式中的
人物地址/地址
?谢谢!这似乎就是问题所在。您能否将架构中的
PersonalAddress/Address
更改为
maxOccurs=“unbounded”
?谢谢!这似乎就是问题所在。谢谢!更改为允许1对多似乎是一个问题。如果他们想更改请求格式,我需要让服务提供商更改它。我不同意这种方法。为什么服务提供商需要更改某些内容?当前的WSDL/XSD不满足哪些数据需求?谢谢!更改为允许1对多似乎是一个问题。如果他们想更改请求格式,我需要让服务提供商更改它。我不同意这种方法。为什么服务提供商需要更改某些内容?当前的WSDL/XSD不满足哪些数据需求?