Załóżmy że mam taki oto WebService napisany w C#:
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
// [System.Web.Script.Services.ScriptService]
public class WebServiceTest : System.Web.Services.WebService
{
[WebMethod]
public string HelloWorld(
string abc,
string qwe,
[XmlArray("fooArray")]
[XmlArrayItem("item")]
Foo[] fooArray)
{
return "Hello World";
}
}
public class Foo
{
public string Bar { get; set; }
}
Generuje on następujący WSDL:
<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"...>
<wsdl:types>
<s:schema elementFormDefault="qualified" targetNamespace="http://tempuri.org/">
<s:element name="HelloWorld">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="abc" type="s:string" />
<s:element minOccurs="0" maxOccurs="1" name="qwe" type="s:string" />
<s:element minOccurs="0" maxOccurs="1" name="fooArray" type="tns:ArrayOfFoo" />
</s:sequence>
</s:complexType>
</s:element>
<s:complexType name="ArrayOfFoo">
<s:sequence>
<s:element minOccurs="0" maxOccurs="unbounded" name="item" nillable="true" type="tns:Foo" />
</s:sequence>
</s:complexType>
<!-- itd.. -->
</s:schema>
</wsdl:types>
</wsdl:definitions>
Co ja muszę dopisać w C# żeby ta linijka w WSDL:
<s:complexType name="ArrayOfFoo">
<s:sequence>
<s:element minOccurs="0" maxOccurs="unbounded" name="item" nillable="true" type="tns:Foo" />
</s:sequence>
</s:complexType>
wyglądała następująco (zmiana z minOccurs z "0" na "1"):
<s:complexType name="ArrayOfFoo">
<s:sequence>
<s:element minOccurs="1" maxOccurs="unbounded" name="item" nillable="true" type="tns:Foo" />
</s:sequence>
</s:complexType>
Jak w przypadku pojedynczych elementów to nie ma problemu tak tutaj wymiękam.