Я хочу вызвать внешнюю службу SOAP, для которой я хочу сгенерировать прокси-классы..Wsdl не отображается в Интернете, но предоставляется вместе с набором файлов .xsd.Затем я использую svcutil (также пробовал с dotnet-svcutil 1.0.4) для генерации классов.Рассмотрим следующий XML:
<xs:complexType name = "ValidationReply" abstract="false">
<xs:complexContent>
<xs:extension base="common:Reply">
<xs:sequence>
<xs:element name="data" type="ns:ValidationReplyData" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="ValidationReplyData" abstract="false">
<xs:sequence>
<xs:element name="errors" type="ns:Error" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
Создает следующий код:
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("dotnet-svcutil", "1.0.4")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="Namespace")]
public partial class ValidationReply: Reply
{
private Error[] dataField;
/// <remarks/>
[System.Xml.Serialization.XmlArrayAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=0)]
[System.Xml.Serialization.XmlArrayItemAttribute("errors", Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=false)]
public Error[] data
{
get
{
return this.dataField;
}
set
{
this.dataField = value;
}
}
}
Проблема заключается в том, что XML определяет внутренний тип, содержащий список ошибок, где Svcutil помещает списокошибки непосредственно в качестве поля данных, вместо этого создается поле данных типа ValidationReplyData.ValidationReplyData не генерируется вообще.
Код компилируется без проблем, и я могу вызвать внешнюю службу без ошибок.Однако поле данных всегда равно нулю, поскольку ответ имеет формат:
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<fl:ValidationReply xmlns:fw="Namespace" >
<data>
<errors>
<code>236</code>
</errors>
<errors>
<code>237</code>
</errors>
</data>
</fl:ValidationReply>
</S:Body>
</S:Envelope>
, который не десериализован правильно для сгенерированного класса.
Короче, кто-нибудь знает, как заставить Svcutil генерировать все классы?Избыточный или нет.
Я упростил фрагменты xml, поэтому в этом примере могут быть некоторые несоответствия, но проблема заключается в отсутствующем классе ValidationReplyData-