У меня есть веб-сервис .NET 4 WCF, который принимает контракт данных с необязательным перечисляемым набором строк. Например:
Сервисный код:
[DataMember(IsRequired = true)]
public string Something {
get { return _Something; }
set { _Something= value; }
}
private string _Something;
[DataMember(IsRequired = false)]
public string[] MoreThings {
get { return _MoreThings.ToArray<string>(); }
set { _MoreThings = new List<string>(value); }
}
private List<string> _MoreThings = new List<string>();
WSDL:
<xsd:complexType name="MyDataContract">
<xsd:sequence>
<xsd:element minOccurs="1" name="Something" type="xsd:string" />
<xsd:element minOccurs="0" name="MoreThings" nillable="true" type="q1:ArrayOfstring" xmlns:q1="http://schemas.microsoft.com/2003/10/Serialization/Arrays" />
</xsd:sequence>
</xsd:complexType>
Я пытаюсь взаимодействовать со службой с разных платформ, но одна из них - Perl, использующая SOAP :: WSDL (и в частности wsdl2perl.pl), которая, похоже, не может распознать «ArrayOfstring». Могу ли я что-нибудь сделать в своем коде, чтобы WSDL читалось так:
<xsd:complexType name="MyDataContract">
<xsd:sequence>
<xsd:element minOccurs="1" name="Something" type="xsd:string" />
<xsd:element minOccurs="0" maxOccurs="unbounded" name="MoreThings" nillable="true" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
Я также открыт для других предложений. По сути, я пытаюсь сделать что-то похожее на объявление метода MyOperation (string что-то, params string [] moreThings), где может быть передано любое количество дополнительных параметров moreThings, но таким образом, что это не вызывает проблем взаимодействия с не Платформы .NET.